Hi again Tomas,

Tomas Klubal wrote:
Sorry,
there is not duplicity now, 2 adresses to save = 2 rows (it's ok)
That's what I expected.

but there is sometimes (50% too) oidPerson (foreign key to person) = 0 in address table.
Mhh, that' strange...
Unfortunately we currently don't have a JDO testsuite.
So I can't tell what could be wrong without having more details.
could you please post the jdo debug messages for a case where things go wrong. Seeing a stacktrace (if any) would also be good.

*********** REPLY SEPARATOR  ***********

On 20.2.2003 at 16:52 Mahler Thomas wrote:


Hi Tomas,

Please set
auto-update="false" and auto-delete="false"
and try again.


Does it mean that jdo support implicitly cascading?

Yes. ODMG and JDO register depended objects (like collection elements) to the current transaction. On transaction commit they both perform persistence operations for all registered objects.

Thus setting auto-update=true results in double inserts. (This is meantioned somewhere in tutorial3.html)

best regards from Essen to Prague,
Thomas




Hope that helps...
cheers,
Thomas


-----Original Message-----
From: Tomas Klubal [mailto:[EMAIL PROTECTED]]
Sent: Thursday, February 20, 2003 3:31 PM
To: [EMAIL PROTECTED]
Subject: JDO - saving objects duplicity


Hello,

1) I'm trying JDO and I receiving errors. Exactly, sometimes (50%) when I'm saving objects are objects in collection saved twice.
I'm using ojb 0.99 built from source connected to mysql DB.
I have two classes Person and Address. One Person can have 0..n Addresses, so I'have collection adresy in Person object ( private Vector adresy;). I'have auto-update = true
When I save object Person with PB everything runs OK, I can see one new Person in table "Person" and new Addresses in table "Address" (if I'm saving two then there are two rows).

When I use JDO, it saves one Person (it's OK), but at 50% of runs there are more rows than Addresses to save (Some rows are duplicated, identical).

Log from JDO looks like this (one Person, two Addresses, seems OK):

*********************************
[JDO] DEBUG: OjbStoreManager.flush: com.uvt.Address{303}, P_NEW
[JDO] DEBUG: OjbStoreManager.insert
[JDO] DEBUG: OjbStoreManager.flush: com.uvt.Person{282}, P_NEW
[JDO] DEBUG: OjbStoreManager.insert
[JDO] DEBUG: OjbStoreManager.flush: com.uvt.Address{302}, P_NEW
[JDO] DEBUG: OjbStoreManager.insert
[JDO] DEBUG: OjbStoreManager.flush: end, err=false
[JDO] DEBUG: OjbStoreConnector.commit
*********************************
but then there are identical rows (sometimes only one Address is duplicated, sometimes both).

My code looks like this:

********************************
public boolean savePerson() {
Person person = null;
Address adresa = null;
Address adresa2 = null;
PersistenceManager manager = null;
PersistenceManagerFactory factory = null;
person = new Person();
person.setJmeno("Thomas");
person.setPrijmeni("Klubal");
adresa2 = new Address();
adresa2.setUlice("Greeen st. 256");
adresa2.setMesto("Prague");
adresa2.setPsc("165 00");
person.addAddress(adresa2);
adresa = new Address();
adresa.setUlice("Red st. 45");
adresa.setMesto("Paris");
adresa.setPsc("895422");
person.addAddress(adresa);
try {
factory = new OjbStorePMF();
manager = factory.getPersistenceManager();
Transaction tx = null;
tx = manager.currentTransaction();
tx.begin();
manager.makePersistent(person);
tx.commit();
System.out.println("\nPerson saved. " + person.toString());
manager.close();
}
catch (PersistenceBrokerException ex) {
System.out.println("Error: " + ex.getMessage());
return false;
}
return true;
}
*************************************************************
this is my repiository_user.xml:

<class-descriptor class="com.uvt.Address" table="Address">
<field-descriptor id="1" name="oid" column="oid" jdbc-type="INTEGER" primarykey="true" autoincrement="true"></field-descriptor>
<field-descriptor id="2" name="oidPerson" column="oidPerson" jdbc-type="INTEGER"></field-descriptor> <field-descriptor id="3" name="ulice" column="ulice" jdbc-type="VARCHAR"></field-descriptor>
<field-descriptor id="4" name="mesto" column="mesto" jdbc-type="VARCHAR"></field-descriptor>
<field-descriptor id="5" name="psc" column="psc" jdbc-type="VARCHAR"></field-descriptor>
</class-descriptor>

<class-descriptor class="com.uvt.Person" table="Person">
<field-descriptor id="1" name="oid" column="oid" jdbc-type="INTEGER" primarykey="true" autoincrement="true"></field-descriptor>
<field-descriptor id="2" name="jmeno" column="jmeno" jdbc-type="VARCHAR"></field-descriptor>
<field-descriptor id="3" name="prijmeni" column="prijmeni" jdbc-type="VARCHAR"></field-descriptor>
<collection-descriptor name="adresy" element-class-ref="com.uvt.Address" orderby="oid" sort="DESC" auto-retrieve="true" auto-update="true" auto-delete="true">
<inverse-foreignkey field-id-ref="2"></inverse-foreignkey>
</collection-descriptor>
</class-descriptor>

Please dont you know whats wrong?


Tomas Klubal :-)
E-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Tomas Klubal :-)
E-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to