Hibernate映射问题一对一/多对一

时间:2011-04-13 13:08:00

标签: hibernate

我在使用Hibernate时遇到了问题。我有3个表:tb_user,tb_book,tb_lending。在 tb_lending 中,我有以下字段:

  • id_lending - int(11) - 主键
  • id_user - int(11) - 外键
  • id_book - int(11) - 外键

我还有表示表格的豆子(tb_user和tb_book正常运作)。

我的tbLending.hbm.xml映射此字段:

    <id name="id" type="java.lang.Integer">
        <column name="id_lending" />
        <generator class="identity" />
    </id>
    <many-to-one name="userId" class="com.wa2011.beans.UserBean"
        not-null="true" cascade="all" unique="true" column="id_user" />
    <many-to-one name="bookId" class="com.wa2011.beans.BookBean"
        not-null="true" cascade="all" unique="true" column="id_book" />

从业务逻辑来看,关联应该是一对一的,因为对于每个id_lending,我可以拥有1个用户和1本书。但我在一些论坛上以这种方式阅读,使用多对一,然后声明unique =“true”。

但是,当我执行query.save时,我收到以下错误:

GRAVE:类中的IllegalArgumentException:com.wa2011.beans.UserBean,属性的getter方法:id

我真的不知道问题是什么,因为tb_book和tb_user正如我在工作之前说的那样魅力。

LendingBean.java中的save方法是:

public void saveLend(LendingBean lendingBean) {
    Session session = iniHibernate();

    try {
        session.beginTransaction();
        session.save(lendingBean);
        session.getTransaction().commit();

    } catch (Exception e) {
        System.out.println("Error on registering lend:");
        System.out.println(e);
    }
}

此方法由processRequest方法中的servlet LendingActions调用,与我跟随其他bean / servlet的模式相同。

<class name="com.wa2011.beans.LendingBean" table="tb_lending" catalog="wa2011">
    <id name="id" type="java.lang.Integer">
        <column name="id_lending" />
        <generator class="identity" />
    </id>
...
</class> 

在LeandingBean.java中我有:

@Stateless
public class LendingBean {

   private Integer id;
   private Integer bookId;
   private Integer userId;

...
}
你能帮助我吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

检查LendingBean bean的id元素到映射。和映射一样吗?

我认为你的LendingBean应该是这样的:

@Stateless
public class LendingBean {

   private Integer id;
   private BookBean bookId;
   private UserBean userId;

...
}