I removed the key generator from the reference class and
setAutoStore(false). the app behaves as I wanted but the reference table
doesn't get updated. It seems as though the cache gets updated
here is my code
public void store(Object obj) {
try {
db = jdoBroker.obtainJDO().getDatabase();
db.setAutoStore(false);
db.begin();
db.update(obj);
db.commit();
db.close();
} catch (Throwable e) {
e.printStackTrace();
} finally {
if (jdoBroker != null) jdoBroker.returnJDO();
}
} //store
public Collection retrieve() {
Object obj;
OQLQuery oql;
QueryResults results = null;
Collection res = new ArrayList();
try {
db = jdoBroker.obtainJDO().getDatabase();
db.begin();
oql = db.getOQLQuery("SELECT b FROM " +
entityClass.getName() + " b");
results = oql.execute(Database.ReadOnly);
while (results.hasMore()) {
obj = results.next();
res.add(obj);
}
db.commit();
db.close();
} catch (Throwable e) {
e.printStackTrace();
} finally {
if (jdoBroker != null) jdoBroker.returnJDO();
}
return res;
} //retrieve
/**
*-- previous message thread:"JDO Mapping Problem"---*
*/
I have a situation where there is a list of pre-defined skills
in the SKILL table and each worker may have many skills, therefore
I have a collection of skill in the Worker class.
I am able to read & remove skills from the collection but when I
insert a skill in the collection, castor tries to Insert an new
record in the skill table as well as the workerskill table.
How do I get it to write only to the workerskill table?
Thank you.
<!-- Table: WORKER -->
<class name="isman.base.person.Worker"
extends="isman.base.person.Colleague"
identity="key">
<description>Person</description>
<map-to table="WORKER" xml="Worker"/>
<!-- +++++++++++++++++++++++++++++++++ -->
<field name="key" type="integer" >
<sql name="WORKERKEY" type="integer"/>
<bind-xml node="attribute"/>
</field>
<field name="lastName" type="string" >
<sql name="LASTNAME" type="varchar"/>
<bind-xml node="attribute"/>
</field>
<!-- education File -->
<field name="educationFile" type="isman.base.Education"
collection="collection">
<sql many-key="PARENTKEY"/>
<bind-xml name="education" node="element"/>
</field>
<!-- employment history File -->
<field name="historyFile" type="isman.base.WorkHistory"
collection="collection">
<sql many-key="PARENTKEY" />
<bind-xml name="history" node="element"/>
</field>
<!-- SKILLS -->
<field name="skills" type="isman.base.Skill"
collection="collection">
<sql many-table="WORKERSKILL" many-key="WORKERKEY"/>
<bind-xml name="skills" node="element"/>
</field>
</class>
<!-- Table: SKILL -->
<class name="isman.base.Skill"
access="shared" identity="key">
<description>Table with existing skills</description>
<map-to table="SKILL" />
<field name="key" type="integer" required="true">
<sql name="SKILLKEY" type="integer" />
</field>
<field name="name" type="string">
<sql name="NAME" type="varchar"/>
</field>
<field name="description" type="string">
<sql name="DESCRIPTION" type="varchar"/>
</field>
<field name="workers" type="isman.base.person.Worker"
collection="collection"
required="false">
<sql many-table="WORKERSKILL" many-key="SKILLKEY" dirty="ignore"/>
</field>
</class>
the primary keys in the tables are as follows:
WORKER - workerkey
WORKERSKILL - workerkey, skillkey
SKILL - skillkey
-----Original Message-----
From: Toni Charlot [mailto:[EMAIL PROTECTED]]
Sent: Wednesday, November 21, 2001 5:11 PM
To: [EMAIL PROTECTED]
Subject: Re: [castor-dev] Castor behaves differently within JBoss
That's the same exactly problem I'm having and I'm not using JBOSS. In fact
I posted this question under subject:"JDO Mapping Problem".
I'm using long transaction where I implement the TimeStampable interface.
I tried with autostore false and true but no cigar. I'll try out a couple
of other things I read from this thread.
good luck to both of us.
-----Original Message-----
From: Jacek Kruszelnicki [mailto:[EMAIL PROTECTED]]
Sent: Wednesday, November 21, 2001 4:39 PM
To: [EMAIL PROTECTED]
Subject: Re: [castor-dev] Castor behaves differently within JBoss
I meant : old object = exists in the database
Here is the code snippet from my other post from a few minutes ago...
I only get exception (about duplicate objects) when trying to commit, not
sooner
(with autostore = true)
try {
t = new Test(70);
// company id=30 already exists in the DB, we just want to fetch it for
reference
Company co = (Company) pm.findByPrimaryKey(test.Company.class, new
Integer(30));
t.setOwnerCompany(co);
System.out.println("Co ++ " + co);
System.out.println("test " + t);
pm.create(t);
}
catch (Exception ex) {
-- Jacek
At 12:50 PM 11/21/2001 -0800, you wrote:
>See inline.
>
>
>
>-----Original Message-----
> >From: Jacek Kruszelnicki [mailto:[EMAIL PROTECTED]]
> >Sent: Thursday, 22 November 2001 9:14 a.m.
> >To: [EMAIL PROTECTED]
> >Subject: Re: [castor-dev] Castor behaves differently within JBoss
> >
> >
> >OK, for now I set autostore to false in the MBean configuration.
> >So I can now create a new object and refer it to an existing object -
ONLY
>
>The old object is not an existing object in the Castor world. It is only
>something outside the atmosphere.
>It is a mis-use. You should load the object again via Castor.
>Or, use long transaction update to made Castor aware of the out-of-space
>object.
>
>
>
>Thomas
>
>-----------------------------------------------------------
>If you wish to unsubscribe from this mailing, send mail to
>[EMAIL PROTECTED] with a subject of:
> unsubscribe castor-dev
Jacek Kruszelnicki
Numatica Corporation
E-mail: [EMAIL PROTECTED]
Phone: (781) 756 8064
-----------------------------------------------------------
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
unsubscribe castor-dev
-----------------------------------------------------------
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
unsubscribe castor-dev
-----------------------------------------------------------
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
unsubscribe castor-dev