Java 如何从Hibernate中的第三个表中获取属性? 公共类菜单{ 私有int-menuId; 私有字符串名称; private Set items=new HashSet(); } 公共类项目{ 私有int-itemId; 私有字符串名称; 私人浮重; 私有集菜单=新HashSet(); }
重量属性应在第三个表“菜单项”中 菜单的xmlJava 如何从Hibernate中的第三个表中获取属性? 公共类菜单{ 私有int-menuId; 私有字符串名称; private Set items=new HashSet(); } 公共类项目{ 私有int-itemId; 私有字符串名称; 私人浮重; 私有集菜单=新HashSet(); },java,hibernate,spring,struts2,hql,Java,Hibernate,Spring,Struts2,Hql,重量属性应在第三个表“菜单项”中 菜单的xml 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; p
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>();
}
项目的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>
mysql中的第三个表菜单项:
menuId、itemId、weight
但是我怎样才能得到重量的值呢?是否要在菜单的xml中写入一些内容?您需要为第三个表创建一个新实体(MenuItem):
<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>
您的映射将从多到多再到一到多,例如:
<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>
另一种方法是使MenuItem类仅@Embeddeble并映射组件集合:
<set name="items" inverse="true">
<key column="item_id"/>
<one-to-many class="MenuItem"/>
</set>
<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>