Hi,
I am using two tables Patient and Rechnung (1-->N see Repository.xml)
The collection-class is RechnungCollection and implements the Interface
ManageableCollection
I have written the following code:
//open database
try {
// 1. open a transaction
tx = odmg.newTransaction();
tx.begin();
// 2. get an OQLQuery object from the ODMG facade
OQLQuery query = odmg.newOQLQuery();
// 3. set the OQL select statement
query.create( "select all from " + Patient.class.getName() );
// 4. perform the query and store the result in a persistent Collection
DList allPatienten = ( DList ) query.execute();
tx.commit();
this leads to the following error / exception:
[org.apache.ojb.odmg.TransactionImpl] ERROR: Locking obj
ziab.massage.dvo.Patient@4a6cbf with lock mode 1 failed
ziab.massage.dvo.RechnungCollection
org.odmg.ClassNotPersistenceCapableException:
ziab.massage.dvo.RechnungCollection
at
org.apache.ojb.odmg.ObjectEnvelope.manage(ObjectEnvelope.java:149)
at
org.apache.ojb.odmg.ObjectEnvelope.<init>(ObjectEnvelope.java:131)
at
org.apache.ojb.odmg.TransactionImpl.register(TransactionImpl.java:672)
at
org.apache.ojb.odmg.TransactionImpl.lock(TransactionImpl.java:264)
at
org.apache.ojb.odmg.oql.OQLQueryImpl.performLockingIfRequired(OQLQueryImpl.java:304)
at
org.apache.ojb.odmg.oql.OQLQueryImpl.execute(OQLQueryImpl.java:278)
at
ziab.massage.po.odmg.PatientenPOODMGImpl.suchePatient(PatientenPOODMGImpl.java:229)
at ziab.massage.gl.PatientenGL.suchePatient(PatientenGL.java:50)
at ziab.massage.gl.PatientenGL.main(PatientenGL.java:143)
(odmg.PatientenPOODMGImpl 255 )
ziab.massage.dvo.RechnungCollection
org.odmg.LockNotGrantedException: ziab.massage.dvo.RechnungCollection
at
org.apache.ojb.odmg.TransactionImpl.lock(TransactionImpl.java:271)
at
org.apache.ojb.odmg.oql.OQLQueryImpl.performLockingIfRequired(OQLQueryImpl.java:304)
at
org.apache.ojb.odmg.oql.OQLQueryImpl.execute(OQLQueryImpl.java:278)
at
ziab.massage.po.odmg.PatientenPOODMGImpl.suchePatient(PatientenPOODMGImpl.java:229)
at ziab.massage.gl.PatientenGL.suchePatient(PatientenGL.java:50)
at ziab.massage.gl.PatientenGL.main(PatientenGL.java:143)
[org.apache.ojb.odmg.TransactionImpl] INFO: Abort transaction was called
on tx org.apache.ojb.odmg.TransactionImpl@3d7848, associated PB was
org.apache.ojb.broker.singlevm.PersistenceBrokerImpl@23e5d1
Do you have any idea what the reason for this could be? Any help is highly
appreciated.
Yours Guido
<!-- Definitions for ziab.massage.dvo.Patient -->
<class-descriptor
class="ziab.massage.dvo.Patient"
table="PATIENTEN"
>
<field-descriptor id="1"
name="id"
column="PATIENTEN_ID"
jdbc-type="INTEGER"
primarykey="true"
autoincrement="true"
/>
<field-descriptor id="2"
name="nachname"
column="NACHNAME"
jdbc-type="VARCHAR"
/>
<field-descriptor id="3"
name="vorname"
column="VORNAME"
jdbc-type="VARCHAR"
/>
<field-descriptor id="4"
name="strasse"
column="STRASSE"
jdbc-type="VARCHAR"
/>
<field-descriptor id="5"
name="plz"
column="PLZ"
jdbc-type="VARCHAR"
/>
<field-descriptor id="6"
name="ort"
column="ORT"
jdbc-type="VARCHAR"
/>
<field-descriptor id="7"
name="vers_art"
column="VERS_ART"
jdbc-type="INTEGER"
/>
<collection-descriptor
name="rechnungen"
collection-class="ziab.massage.dvo.RechnungCollection"
element-class-ref="ziab.massage.dvo.Rechnung"
auto-retrieve="true"
orderby="id"
sort="DESC">
<inverse-foreignkey field-id-ref="8"/>
</collection-descriptor>
</class-descriptor>
<!-- Definitions for ziab.massage.dvo.Rechnung
-->
<class-descriptor
class="ziab.massage.dvo.Rechnung"
table="RECHNUNG"
>
<field-descriptor id="1"
name="id"
column="RECHNUNG_ID"
jdbc-type="INTEGER"
primarykey="true"
autoincrement="true"
/>
<field-descriptor id="2"
name="rechnungNr"
column="RE_NR"
jdbc-type="VARCHAR"
/>
<field-descriptor id="3"
name="rechnungDatum"
column="RECHNUNG_DATUM"
jdbc-type="DATE"
/>
<field-descriptor id="4"
name="rezeptDatum"
column="REZEPT_DATUM"
jdbc-type="DATE"
/>
<field-descriptor id="5"
name="rechnungBetrag"
column="RECHNUNG_BETRAG"
jdbc-type="DOUBLE"
/>
<field-descriptor id="6"
name="behandlungVon"
column="BEHANDLUNG_VON"
jdbc-type="DATE"
/>
<field-descriptor id="7"
name="behandlungBis"
column="BEHANDLUNG_BIS"
jdbc-type="DATE"
/>
<field-descriptor id="8"
name="fkPatientId"
column="PATIENTEN_ID"
jdbc-type="INTEGER"
/>
<reference-descriptor
name="patient"
class-ref="ziab.massage.dvo.Patient">
<foreignkey field-id-ref="8"/>
</reference-descriptor>
</class-descriptor>