我遇到了一个使用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;
...
}