So I've been using Torque for two days and have had to fix two major bugs to get it to
work for me.. either I'm doing things very wrong or this framework has some serious
issues.
Has anyone seen this? Does anyone use a pure foreign key table successfully? If so,
what am I doing wrong?
Here is what I found today:
I have 3 tables, PARTNER, PERSON, and PARTNER_PERSON
PARTNER_PERSON holds an m:n mapping between PARTNER and PERSON. DDL:
create table PARTNER_PERSON (
PARTNER_ID NUMBER references PARTNER.id,
PERSON_ID NUMBER references PERSON.id
)
I can use Torque to create Persons and Partners, but when I try to create a
PartnerPerson object to save a relationship, I get an error stating:
at com.win.core.testcase.TorqueTestCase.main(TorqueTestCase.java:32)
rethrown as org.apache.torque.TorqueException: Database insert attempted without
anything specified to insert
This is of course after having set the values within it. Here is my test code:
Partner partner = new Partner();
partner.setemail("[EMAIL PROTECTED]");
partner.setpName("xxx");
partner.setNew(true);
partner.save();
Person person1 = new Person();
person1.setfName("Ryan");
person1.setlName("Clifton");
person1.setNew(true);
person1.save();
PartnerPerson pu = new PartnerPerson();
//pu.setPartner(partner);
//pu.setPerson(person1);
pu.setpartnerId(partner.getID());
pu.setpersonId(person1.getID());
pu.setNew(true);
pu.save();
I have tried setting the values in every combination that is possible (not using ID,
but using the objects for exampls). I've tried setting setNew(false). I either get
no error and no saved record or an error on insert.
I fixed the problem by editing BasePartnerPersonPeer.java::buildCriteria(PartnerPerson
obj)
Here is the original:
/** Build a Criteria object from the data object for this peer */
public static Criteria buildCriteria( PartnerPerson obj )
{
Criteria criteria = new Criteria(DATABASE_NAME);
if (!obj.isNew())
criteria.add(PERSON_ID, obj.getpersonId());
if (!obj.isNew())
criteria.add(PARTNER_ID, obj.getpartnerId());
return criteria;
}
After looking at some other BaseXXPeer classes, I noticed that they always add
something to a criteria. In the above case, it's possible to not add anything to the
criteria. So the simple fix was this:
/** Build a Criteria object from the data object for this peer */
public static Criteria buildCriteria( PartnerPerson obj )
{
Criteria criteria = new Criteria(DATABASE_NAME);
//if (!obj.isNew())
criteria.add(PERSON_ID, obj.getpersonId());
//if (!obj.isNew())
criteria.add(PARTNER_ID, obj.getpartnerId());
return criteria;
}
Thanks!
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>