Hi again,

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]



Reply via email to