2011-11-05 22 views
0
public class Menu { 
    private int menuId; 
    private String name; 
    private Set<Item> items=new HashSet<Item>(); 

} 
public class Item { 
    private int itemId; 
    private String name; 
    private Float weight; 
    private Set<Menu> menus=new HashSet<Menu>(); 
} 

重量屬性應該在第三個表「menu_item」。如何從Hibernate的第三個表中獲取屬性?

菜單的XML

<class name="Menu" table="menu"> 
    <id name="menuId" type="java.lang.Integer" column="menuId"> 
     <generator class="increment"></generator> 
    </id> 
    <property name="name" type="string" column="menuName" length="100"></property> 
    <set access="property" lazy="true" inverse="false" cascade="save-update" 
     name="items" batch-size="10" fetch="select" table="menu_item"> 
     <key column="menuId" /> 
     <many-to-many class="Item" column="itemId" /> 
    </set> 

項目的XML:在mysql中

<class name="Item" table="item"> 
    <id name="itemId" type="java.lang.Integer" column="itemId"> 
     <generator class="increment"></generator> 
    </id> 
    <property name="name" type="string" column="itemName" length="100"></property> 
    <set access="property" lazy="true" inverse="false" cascade="save-update" 
     name="menus" batch-size="10" fetch="select" table="menu_item"> 
     <key column="itemId" /> 
     <many-to-many class="Menu" column="menuId" /> 
    </set> 
</class> 

第三表MENU_ITEM: 菜單Id,的itemId,重量

但我怎麼能得到權重的價值?我可以在菜單的xml中寫些什麼嗎?

回答

1

你需要創建一個新的實體(菜單項)的第三張表:

<class name="MenuItem" table="menu_item" mutable="false"> 
    <composite-id name="id" class="MenuItem$Id"> 
    <key-property name="menuId" access="field" column="menu_id"/> 
    <key-property name="itemId" access="field" column="item_id"/> 
    </composite-id> 
    <property name="weight" column="weight" type="string" not-null="true"/> 
    <many-to-one name="menu" column="menu_id" not-null="true" insert="false" update="false"/> 
    <many-to-one name="item" column="item_id" not-null="true" insert="false" update="false"/> 
</class> 

您的映射將多對多的一個改變了許多,例如:

<set name="items" inverse="true"> 
    <key column="item_id"/> 
    <one-to-many class="MenuItem"/> 
</set> 

另一種方法是使MenuItem類僅包含@Embeddable並映射一組組件集合:

<class name="Menu" table="menu"> 
    <set name="menuItems" table="menu_item"> 
     <key column="menu_id"/> 
     <composite-element class="MenuItem"> 
      <parent name="menu"/> 
      <many-to-one name="item" column="menu_id" not-null="true" class="Item"/> 
      <property name="weight" column="weight"/> 
     </composite-element> 
    </set> 
</class> 
相關問題