The repository snipplet looks quite similar to mine. I post the original
code snipplets of the repository and the query, just to make sure, that
I haven't forgotten anything.
(TestRun <=> TestLauf, TestStep <=> TestSchritt/TestSchrittXDE)
I've tried different combinations for the query
(i.e. ("testLauf", "testLaufId") as 1st Parameter of addEqualTo or
(lauf, new Identity(lauf, broker)) as 2nd Parameter), but I always
get a SQL exception (Ung�ltiger Spaltentyp <=> invalid rowtype),
which means that the OJB tries to bind the TestLauf-Object with
PreparedStatement.setObject().
Thank you for your help,
Andreas.
*************************************************************
Query-Snipplet:
private static Iterator getTestSchrittIterator(PersistenceBroker broker,
TestLauf lauf) {
Criteria schrittKat = new Criteria();
// ... some inner join criterias ...
Criteria schrittCrit = new Criteria();
// works
schrittCrit.addEqualTo("testLauf", new Identity(lauf,
broker).getPrimaryKeyValues()[0]);
// ... doesn't
// schrittCrit.addEqualTo("testLauf", lauf);
schrittCrit.addAndCriteria(schrittKat);
QueryByCriteria schrittQuery = QueryFactory.newQuery(TestSchrittXDE.class,
schrittCrit);
schrittQuery.setDistinct(true);
return broker.getIteratorByQuery(schrittQuery);
}
*************************************************************
Repository-Snipplet:
<class-descriptor
class="de.wwk.voran.apps.common.model.test.TestLauf"
table="TestLauf">
<field-descriptor
name="testLaufId"
column="testLaufId"
jdbc-type="INTEGER"
primarykey="true"
autoincrement="true"
access="anonymous"/>
<!-- ... -->
</class-descriptor>
<class-descriptor
class="de.wwk.voran.apps.common.model.test.TestSchritt">
<extent-class class-ref="de.wwk.voran.apps.common.model.test.TestSchrittXDE"/>
</class-descriptor>
<class-descriptor
class="de.wwk.voran.apps.common.model.test.TestSchrittXDE"
table="TestSchrittXDE">
<field-descriptor
name="testSchrittId"
column="testSchrittId"
jdbc-type="INTEGER"
primarykey="true"
autoincrement="true"
access="anonymous"/>
<field-descriptor
name="testLaufId"
column="testLaufId"
jdbc-type="INTEGER"
access="anonymous"/>
<reference-descriptor
name="testLauf"
class-ref="de.wwk.voran.apps.common.model.test.TestLauf"
auto-retrieve="true"
auto-update="link"
auto-delete="link">
<foreignkey field-ref="testLaufId"/>
</reference-descriptor>
<!-- ... -->
</class-descriptor>
*************************************************************
Exception when binding the TestLauf-object directly:
java.sql.SQLException: Ung�ltiger Spaltentyp
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at
oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:3088)
at
oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:3217)
at
org.apache.ojb.broker.accesslayer.StatementManager.bindStatementValue(StatementManager.java:227)
at
org.apache.ojb.broker.accesslayer.StatementManager.bindStatement(StatementManager.java:248)
at
org.apache.ojb.broker.accesslayer.StatementManager.bindSelectionCriteria(StatementManager.java:424)
at
org.apache.ojb.broker.accesslayer.StatementManager.bindStatement(StatementManager.java:388)
at
org.apache.ojb.broker.accesslayer.StatementManager.bindStatement(StatementManager.java:361)
at
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(JdbcAccessImpl.java:279)
at org.apache.ojb.broker.accesslayer.RsQueryObject.performQuery(Unknown
Source)
at org.apache.ojb.broker.accesslayer.RsIterator.<init>(Unknown Source)
at
org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIterator(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getIteratorByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getIteratorByQuery(Unknown
Source)
at
de.wwk.voran.apps.common.db.DBMapper.getTestSchrittIterator(DBMapper.java:248)
at
de.wwk.voran.apps.common.db.DBMapper.selectTestSchritt(DBMapper.java:182)
at de.wwk.voran.apps.common.db.DBMapper.main(DBMapper.java:56)
org.apache.ojb.broker.PersistenceBrokerSQLException: java.sql.SQLException:
Ung�ltiger Spaltentyp
at
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(JdbcAccessImpl.java:318)
at org.apache.ojb.broker.accesslayer.RsQueryObject.performQuery(Unknown
Source)
at org.apache.ojb.broker.accesslayer.RsIterator.<init>(Unknown Source)
at
org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIterator(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getIteratorByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getIteratorByQuery(Unknown
Source)
at
de.wwk.voran.apps.common.db.DBMapper.getTestSchrittIterator(DBMapper.java:248)
at
de.wwk.voran.apps.common.db.DBMapper.selectTestSchritt(DBMapper.java:182)
at de.wwk.voran.apps.common.db.DBMapper.main(DBMapper.java:56)
Caused by: java.sql.SQLException: Ung�ltiger Spaltentyp
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at
oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:3088)
at
oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:3217)
at
org.apache.ojb.broker.accesslayer.StatementManager.bindStatementValue(StatementManager.java:227)
at
org.apache.ojb.broker.accesslayer.StatementManager.bindStatement(StatementManager.java:248)
at
org.apache.ojb.broker.accesslayer.StatementManager.bindSelectionCriteria(StatementManager.java:424)
at
org.apache.ojb.broker.accesslayer.StatementManager.bindStatement(StatementManager.java:388)
at
org.apache.ojb.broker.accesslayer.StatementManager.bindStatement(StatementManager.java:361)
at
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(JdbcAccessImpl.java:279)
... 11 more
Exception in thread "main"
> I haven't looked at the source of OJB for quite a while; and then it
> wan't in any depth.
>
> I'd suggest you double-check the mappings in your repository.xml; I
> think you might have a typo, or mismatch... I believe the
> xml for what
> you're mapping should look something like:
>
> <class-descriptor
> class="com.x.y.TestStep"
> table="TestStep">
> <field-descriptor
> name="id"
> column="id"
> jdbc-type="BIGINT"
> primarykey="true"
> autoincrement="true"/>
> <field-descriptor
> name="testRunId"
> column="testRunId"
> jdbc-type="BIGINT"
> access="anonymous"/>
> ....
> <reference-descriptor
> name="testRun"
> class-ref="com.x.y.TestRun"
> refresh="true"
> auto-retrieve="true"
> auto-update="true"
> auto-delete="false">
> <foreignkey field-ref="testRunId"/>
> </reference-descriptor>
> </class-descriptor>
>
> <class-descriptor
> class="com.x.y.TestRun"
> table="TestRun">
> <field-descriptor
> name="id"
> column="id"
> jdbc-type="BIGINT"
> primarykey="true"
> autoincrement="true"/>
> ...
> </class-descriptor>
>
> While you would then need a TestStep class like:
> public class TestStep {
> private TestRun testRun = null;
> ....
> }
>
> Aside from double checking these I can't think of anything.
> I have not
> had any trouble with this type of mapping.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]