Stephan Wannenwetsch wrote:
Hallo Armin,
1) Nothing changed in mapping for Supplier 2) "fk_bpid" is the primary key for this class/table, but it is also the foreign key of the 1:1 relationship to BusinessPartner
I think this is problematic, because the pc object does not declare such a field (you set to anonymous). OJB try to build a Identity object for each pc object based on the PK fields and the only primarykey field in Supplier is declared anonymous ...
Recommend to introduce a PK field for Supplier and set primarykey false for fk_bpid.
3) I'm not quite sure if I have to declare a field-descriptor for "SUPPLIERID", because in the docs ("Advanced O/R") nothing is mentioned.
yes, you are right - my fault. I'm not an expert for metadata stuff ;-)
4) The SQL-Error occures just after I had changed the mapping of SellableItem, Product, ServiceContract as Wally said, before insert was not the problem. So perhaps the mapping of the Products is the problem !?But the mapping for these classes looks fine to me.
regards, Armin
Thanks,
Stephan
-----Original Message-----
From: Armin Waibel [mailto:[EMAIL PROTECTED] Sent: Wednesday, December 17, 2003 10:29 AM
To: OJB Users List
Subject: Re: Mapping problem
Hi Stephan,
hmm, how does your mapping for demo.myshop.model.ojb2.Supplier look like (nothing changed from your first post)?
From your first post
>> <class-descriptor >> class="demo.myshop.model.ojb2.Supplier" >> table="OJB_SUPPLIER"> >> <field-descriptor >> name="fk_bpid" >> column="FK_BPID" >> jdbc-type="INTEGER" >> primarykey="true"
Why you set primarykey 'true' for this anonymous field?
>> autoincrement="false" >> access="anonymous"/> >> >> <field-descriptor >> name="shippingCost" >> column="SHIPPINGCOST" >> jdbc-type="INTEGER"/> >> >> <reference-descriptor >> name="businessPartner" >> class-ref="demo.myshop.model.ojb2.BusinessPartner"> >> <foreignkey field-ref="fk_bpid"/> >> </reference-descriptor> >> >> <collection-descriptor >> name="items" >> element-class-ref="demo.myshop.model.ojb2.SellableItem" >> auto-retrieve="true" >> auto-update="true" >> indirection-table="OJB_SUPPLIER_ITEM"> >> <fk-pointing-to-this-class column="SUPPLIERID"/>
Can't see a field-descriptor with SUPPLIERID column in this class-descriptor.
>> <fk-pointing-to-element-class column="ITEMID"/> >> </collection-descriptor> >> >> </class-descriptor>
regards, Armin
Stephan Wannenwetsch wrote:
Hi Armin,
I checked it but nothing changed. I also removed all data from the DB-tables but nothing changed, too.
Thanks, Stephan
-----Original Message----- From: Armin Waibel [mailto:[EMAIL PROTECTED] Sent: Monday, December 15, 2003 6:03 PM To: OJB Users List Subject: Re: Mapping problem
Hi,
maybe sequence-name "algorithm" had problems. Try to remove related row in OJB_HL_SEQ table (name of the first found extent class table name). You can do a quick check using SequenceManagerInMemoryImpl in your test.
If your test pass, it's a H/L sequence manager problem.
regards, Armin
Stephan Wannenwetsch wrote:
Hi Wally,
I'm using the following sequence-manager:
<sequence-manager className="org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl"> <attribute attribute-name="grabSize" attribute-value="20"/> <attribute attribute-name="autoNaming" attribute-value="true"/> <attribute attribute-name="globalSequenceId" attribute-value="false"/> <attribute attribute-name="globalSequenceStart" attribute-value="10000"/> </sequence-manager>
Stephan
-----Original Message----- From: Gelhar, Wallace Joseph [mailto:[EMAIL PROTECTED] Sent: Monday, December 15, 2003 5:35 PM To: OJB Users List Subject: RE: Mapping problem
Hi Stephan,
Sounds like a sequence manager configuration problem. A PK must be
unique within an extent hierarchy, so you cannot use an IDENTITY column for a PK. What sequence manager are you using?
Wally
-----Original Message----- From: Stephan Wannenwetsch [mailto:[EMAIL PROTECTED] Sent: Monday, December 15, 2003 10:16 AM To: OJB Users List Subject: RE: Mapping problem
Hallo Wally,
I've changed the mapping into: <class-descriptor class="demo.myshop.model.ojb2.SellableItem"> <extent-class class-ref="demo.myshop.model.ojb2.ServiceContract" /> <extent-class class-ref="demo.myshop.model.ojb2.Product" /> </class-descriptor>
<class-descriptor class="demo.myshop.model.ojb2.ServiceContract" table="OJB_SELLABLEITEM"> <field-descriptor name="itemId" column="ITEMID" jdbc-type="INTEGER" primarykey="true" autoincrement="true"/> <field-descriptor name="ojbConcreteClass" column="CLASS_NAME" jdbc-type="VARCHAR"/> <field-descriptor name="description" column="DESCRIPTION" jdbc-type="VARCHAR"/> <field-descriptor name="price" column="PRICE" jdbc-type="INTEGER"/> <field-descriptor name="period" column="PERIOD" jdbc-type="INTEGER"/>
<collection-descriptor
name="suppliers"
element-class-ref="demo.myshop.model.ojb2.Supplier"
auto-retrieve="true"
auto-update="true"
indirection-table="OJB_SUPPLIER_ITEM">
<fk-pointing-to-this-class column="ITEMID"/>
<fk-pointing-to-element-class column="SUPPLIERID"/>
</collection-descriptor>
</class-descriptor>
<class-descriptor
class="demo.myshop.model.ojb2.Product"
table="OJB_SELLABLEITEM">
<field-descriptor
name="itemId"
column="ITEMID"
jdbc-type="INTEGER"
primarykey="true"
autoincrement="true"/>
<field-descriptor
name="ojbConcreteClass"
column="CLASS_NAME"
jdbc-type="VARCHAR"/>
<field-descriptor
name="description"
column="DESCRIPTION"
jdbc-type="VARCHAR"/>
<field-descriptor
name="price"
column="PRICE"
jdbc-type="INTEGER"/>
<field-descriptor
name="weight"
column="WEIGHT"
jdbc-type="INTEGER"/>
<collection-descriptor
name="suppliers"
element-class-ref="demo.myshop.model.ojb2.Supplier"
auto-retrieve="true"
auto-update="true"
indirection-table="OJB_SUPPLIER_ITEM">
<fk-pointing-to-this-class column="ITEMID"/>
<fk-pointing-to-element-class column="SUPPLIERID"/>
</collection-descriptor>
</class-descriptor>
But now I get an error when I store a supplier (primary key - error, pk not unique in OJB_SUPPLIER_ITEM, can't insert). Transaction started
[org.apache.ojb.broker.accesslayer.JdbcAccessImpl] ERROR: SQLException during the execution of the Update SQL query (for a demo.myshop.model.ojb2.Supplier): [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Verletzung der PRIMARY KEY-Einschr�nkung 'PK_OJB_SUPPLIER_ITEM'. Ein doppelter Schl�ssel kann in das OJB_SUPPLIER_ITEM-Objekt nicht eingef�gt werden. [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Verletzung der PRIMARY KEY-Einschr�nkung 'PK_OJB_SUPPLIER_ITEM'. Ein doppelter Schl�ssel kann
i n das OJB_SUPPLIER_ITEM-Objekt nicht eingef�gt werden.
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Verletzung der PRIMARY KEY-Einschr�nkung 'PK_OJB_SUPPLIER_ITEM'. Ein doppelter Schl�ssel kann in das OJB_SUPPLIER_ITEM-Objekt nicht eingef�gt werden. at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source) at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
Some more ideas ???
Thanks, Stephan
-----Original Message----- From: Gelhar, Wallace Joseph [mailto:[EMAIL PROTECTED] Sent: Monday, December 15, 2003 3:44 PM To: OJB Users List Subject: RE: Mapping problem
Hi Stephan,
OJB does not support class descriptor inheritance for <extent-class>
elements. Try moving your "common" fields from Sellable item into each of the concrete class descriptors and making Sellable item non-concrete (it is only an interface after all) such as:
<class-descriptor class="demo.myshop.model.ojb2.SellableItem" > <extent-class class-ref="demo.myshop.model.ojb2.ServiceContract" /> <extent-class class-ref="demo.myshop.model.ojb2.Product" /> </class-descriptor>
Hope this helps.
Wally
-----Original Message----- From: Stephan Wannenwetsch [mailto:[EMAIL PROTECTED] Sent: Monday, December 15, 2003 4:16 AM To: [EMAIL PROTECTED] Subject: Mapping problem
Hallo,
I've got a problem retrieving objects from a m:n relationship:
Object model:
class Supplier; =>Collection items;
Interface SellableItem; =>Collection suppliers;
class Product implements SellableItem; => Collection suppliers;
class ServiceContract implements SellableItem; => Collection suppliers;
Of course there are some more attributes in each class with the corresponding getter and setters.
I use an itermediate table OJB_SUPPLIER_ITEM to realise the m:n relationship.
Every thing works fine coming from the supplier side and retriving the
related items of a supplier but I'm not able to retrieve the related suppliers of an item.
I hope someone can help me.
Thanks, Stephan
Mapping:
<class-descriptor
class="demo.myshop.model.ojb2.Supplier"
table="OJB_SUPPLIER">
<field-descriptor
name="fk_bpid"
column="FK_BPID"
jdbc-type="INTEGER"
primarykey="true"
autoincrement="false"
access="anonymous"/>
<field-descriptor
name="shippingCost"
column="SHIPPINGCOST"
jdbc-type="INTEGER"/>
<reference-descriptor
name="businessPartner"
class-ref="demo.myshop.model.ojb2.BusinessPartner">
<foreignkey field-ref="fk_bpid"/>
</reference-descriptor>
<collection-descriptor
name="items"
element-class-ref="demo.myshop.model.ojb2.SellableItem"
auto-retrieve="true"
auto-update="true"
indirection-table="OJB_SUPPLIER_ITEM">
<fk-pointing-to-this-class column="SUPPLIERID"/>
<fk-pointing-to-element-class column="ITEMID"/>
</collection-descriptor>
</class-descriptor>
<class-descriptor class="demo.myshop.model.ojb2.SellableItem" table="OJB_SELLABLEITEM"> <extent-class class-ref="demo.myshop.model.ojb2.ServiceContract" /> <extent-class class-ref="demo.myshop.model.ojb2.Product" /> <field-descriptor name="itemId" column="ITEMID" jdbc-type="INTEGER" primarykey="true" autoincrement="true"/> <field-descriptor name="ojbConcreteClass" column="CLASS_NAME" jdbc-type="VARCHAR"/> <field-descriptor name="description" column="DESCRIPTION" jdbc-type="VARCHAR"/> <field-descriptor name="price" column="PRICE" jdbc-type="INTEGER"/> <collection-descriptor name="suppliers" element-class-ref="demo.myshop.model.ojb2.Supplier" auto-retrieve="true" auto-update="true" indirection-table="OJB_SUPPLIER_ITEM"> <fk-pointing-to-this-class column="ITEMID"/> <fk-pointing-to-element-class column="SUPPLIERID"/> </collection-descriptor> </class-descriptor>
<class-descriptor
class="demo.myshop.model.ojb2.ServiceContract"
table="OJB_SELLABLEITEM">
<field-descriptor
name="itemId"
column="ITEMID"
jdbc-type="INTEGER"
primarykey="true"
autoincrement="true"/>
<field-descriptor
name="ojbConcreteClass"
column="CLASS_NAME"
jdbc-type="VARCHAR"/>
<field-descriptor
name="description"
column="DESCRIPTION"
jdbc-type="VARCHAR"/>
<field-descriptor
name="price"
column="PRICE"
jdbc-type="INTEGER"/>
<field-descriptor
name="period"
column="PERIOD"
jdbc-type="INTEGER"/>
</class-descriptor>
<class-descriptor
class="demo.myshop.model.ojb2.Product"
table="OJB_SELLABLEITEM">
<field-descriptor
name="itemId"
column="ITEMID"
jdbc-type="INTEGER"
primarykey="true"
autoincrement="true"/>
<field-descriptor
name="ojbConcreteClass"
column="CLASS_NAME"
jdbc-type="VARCHAR"/>
<field-descriptor
name="description"
column="DESCRIPTION"
jdbc-type="VARCHAR"/>
<field-descriptor
name="price"
column="PRICE"
jdbc-type="INTEGER"/>
<field-descriptor
name="weight"
column="WEIGHT"
jdbc-type="INTEGER"/>
</class-descriptor>
--------------------------------------------------------------------- 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]
--------------------------------------------------------------------- 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]
--------------------------------------------------------------------- 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]
--------------------------------------------------------------------- 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]
--------------------------------------------------------------------- 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]
