Hello everyone,
I came accross a strange OQL to SQL translation.
I'm trying to do this :
oql = db.getOQLQuery( "SELECT a FROM net.talath.server.data.Action a WHERE
a.player.money = $1 " );
oql.bind(0);
And I get the following exception :
java.sql.SQLException: Column not found: ID in statement [SELECT
action_queue.id,action_queue.player_id,action_queue.data FROM
player,action_queue WHERE action_queue.player_id=player_0.id AND
player_0.money = 0]
at org.hsqldb.Trace.getError(Trace.java:180)
at org.hsqldb.jdbcResultSet.<init>(jdbcResultSet.java:2645)
at
org.hsqldb.jdbcConnection.executeStandalone(jdbcConnection.java:994)
at org.hsqldb.jdbcConnection.execute(jdbcConnection.java:721)
at org.hsqldb.jdbcStatement.fetchResult(jdbcStatement.java:686)
at org.hsqldb.jdbcStatement.executeQuery(jdbcStatement.java:68)
at
org.hsqldb.jdbcPreparedStatement.executeQuery(jdbcPreparedStatement.java:133
)
at
org.exolab.castor.jdo.engine.SQLEngine$SQLQuery.execute(SQLEngine.java:1584)
at
org.exolab.castor.persist.TransactionContext.query(TransactionContext.java:6
44)
at
org.exolab.castor.jdo.engine.OQLQueryImpl.execute(OQLQueryImpl.java:458)
at
org.exolab.castor.jdo.engine.OQLQueryImpl.execute(OQLQueryImpl.java:405)
at net.talath.server.data.test.JDOTest.main(JDOTest.java:82)
Here is important parts of my mapping.xml :
<class name="net.talath.server.data.Player" identity="id"
key-generator="high-low">
<map-to table="player" xml="player"/>
<field name="id">
<sql name="id"/>
</field>
<field name="nickname" type="string">
<sql name="nickname" type="char" dirty="check"/>
</field>
<field name="money" type="integer">
<sql name="money" type="integer"/>
</field>
<field name="actions" type="net.talath.server.data.Action"
required="false" collection="collection">
<sql many-key="player_id"/>
</field>
</class>
<class name="net.talath.server.data.Action" identity="id"
key-generator="high-low">
<map-to table="action_queue" xml="action"/>
<field name="id">
<sql name="id"/>
</field>
<field name="player" type="net.talath.server.data.Player">
<sql name="player_id"/>
</field>
<field name="data" type="string">
<sql name="data" type="char" dirty="ignore"/>
</field>
</class>
And my tables schema (in SQL) :
create table player (
id int not null,
nickname varchar(32) not null,
password varchar(32) not null,
email varchar(64) not null,
kingdom_name varchar(32) not null,
money int not null
);
create unique index player_pk on player ( id );
create table action_queue (
id int not null,
data varchar(4096) not null,
player_id int not null
);
create unique index action_pk on action_queue ( id );
Why did "player" table become "player_0" in OQL to SQL translation ?!
Lunar.
-----------------------------------------------------------
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
unsubscribe castor-dev