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



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

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

我还有代表表的bean (tb_user和tb_book工作得很好)。

My 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"。

但是,当我执行查询时。我得到以下错误:

GRAVE: IllegalArgumentException in class: com.wa2011.beans。UserBean,属性的getter方法:id

我真的不知道问题出在哪里,因为tb_book和tb_user就像我之前说的那样,工作起来很有魅力。

LendingBean.java中的保存方法是:

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;
...
}
你能帮我一下吗?

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

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

@Stateless
public class LendingBean {
   private Integer id;
   private BookBean bookId;
   private UserBean userId;
...
} 

最新更新