Fornax-Platform
Forum

Re: [Sculptor] uni-directional one-to-many mapping?

by Patrik Nordwall :: Rate this Message:

Reply to Author | View in Thread

Hi Deepak,

CASE2 is wrong way.

You have two options.
1) many-to-many join table. This is the default.
2) foreign key column in ITEM. This is the result of inverse keyword.

Alternative 2 is more efficient, but it introduces a dependency at the db level from item to inventory, which is sometimes unwanted, especially when inventory and item are in different modules.

I don't think you can design this in the database in any other way.

Below INVENTORY table will not be able reference several items for one inventory.
CREATE TABLE INVENTORY (
     INVENTORY_ID NUMBER(20) NOT NULL,
     ITEM_ID NUMBER(20) NOT NULL,
)


/Patrik




deepshar027 wrote:
Hey Patrick,

I am facing this problem.

Consider this..similar like your example.

Entity Inventory{
  - List<@Item> items
}
Entity Item{
}

This generates an additional table INVENTORY_ITEM which I dont want (many-2-many relationship.)
I want to have unidiretional relationship(one-2-many) as only inventory can have items.

Now If I do the following

CASE:1

Entity Inventory{
  - List<@Item> items inverse
}

I see a reference of INVENTORY in item table which is not expected.
CREATE TABLE ITEM (
  ITEM_ID NUMBER(20) NOT NULL,
  INVENTORY NUMBER(20)  ,
);

What I want to have is just below and there should no reference of Inventory in Item table.

CREATE TABLE INVENTORY (
     INVENTORY_ID NUMBER(20) NOT NULL,
     ITEM_ID NUMBER(20) NOT NULL,
)

CASE 2:

I did the following(Not sure why but I read somewhere that inverse creates a reference in the child table)
As such the following doesnt look correct to me but still I tried

Entity Inventory{
 }
Entity Item{
    - List<@Inventory> inv inverse
}

It does this which seems okk...although it creates this INV_INDEX(INTEGER) which I'll have to fix somehow to make NUMBER

CREATE TABLE INVENTORY (
  INVENTORY_ID NUMBER(20) NOT NULL,
  INV_INDEX INTEGER(10),
  ITEM NUMBER(20)            
);

This is fine so far....but in Item.hbm.xml I see
<list name="inv">
      <key column="ITEM"/>  
      <index column="INV_INDEX"/>  
      <one-to-many class="com.bookonz.inventory.domain.Inventory"/>
    </list>  

I am not sure if this is correct? Should Item.hbm hold a reference to Inventory?


Please provide your inputs on this.

Thanks,
Deepak.

 « Return to Thread: [Sculptor] uni-directional one-to-many mapping?