java - 我如何从 Hibernate 的第三张表中获取属性?

标签 java hibernate spring struts2 hql

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”中。

菜单的 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:

<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>

mysql中的第三个表menu_item: 菜单Id、项目Id、重量

但是我怎样才能得到重量值呢?我应该在菜单的 xml 中写一些东西吗?

最佳答案

您需要为第三个表创建一个新实体 (MenuItem):

<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>

关于java - 我如何从 Hibernate 的第三张表中获取属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8017920/

相关文章:

java - 如何在 Java 中以编程方式处理 SMTPSendFailedException

java - 空指针异常异常; "AWT-EventQueue-0"

java - 从 EditText 到 float 的字符串

java.lang.IllegalArgumentException : argument type mismatch using setResultTransformer (hibernate)

mysql - 非法参数异常 : Type cannot be null (in JAVA)

java - 错误 : "java.sql.SQLSyntaxErrorException: Table ' db_example. 表'不存在”即使 Hibernate 说该表已创建

java - Hibernate:如何指定左侧条件?

java - Spring - 使用 OpenSessionInViewFilter 为新线程提供 Hibernate session

java - Jersey : Do I need to have maven dependency for JSR as well? 为什么?

java - Spring:@BootstrapWith 用于 ApplicationContext