Hibernate一对一映射

时间:2012-04-09 15:28:42

标签: hibernate java-ee nhibernate-mapping hibernate-mapping

我在hibernate一对一映射中遇到问题。用Google搜索但无法解决。

这是数据库

http://www.freeimagehosting.net/newuploads/55avs.png

以下是我的模型类

公共类用户{

private int userId;
private String userName;
private Address address;

public Address getAddress() {
    return address;
}
public void setAddress(Address address) {
    this.address = address;
}
public int getUserId() {
    return userId;
}
public void setUserId(int userId) {
    this.userId = userId;
}

public String getUserName() {
    return userName;
}
public void setUserName(String userName) {
    this.userName = userName;
}

}

公共类地址{

private int addrId;
private String addr;

public int getAddrId() {
    return addrId;
}
public void setAddrId(int addrId) {
    this.addrId = addrId;
}
public String getAddr() {
    return addr;
}
public void setAddr(String addr) {
    this.addr = addr;
}

}

user.hbm.xml 如下:

<class name="User" table="users" schema="dbo" catalog="test">
      <id name="userId" type="int" column="userId" >
        <generator class="assigned"/>
      </id>

      <property name="userName">
         <column name="userName" />
      </property>

      <one-to-one name="address" property-ref="addrId"  class="Address" cascade="all" />

  </class>

address.hbm.xml如下,

<class name="ammar.Address" table="Address" schema="dbo" catalog="test">

      <id name="addrId" type="int" column="AddrID" >
        <generator class="assigned"/>
      </id>

      <property name="addr">
         <column name="Addr" />
      </property>

  </class>

运行时,发生以下异常:

线程“main”中的异常org.hibernate.HibernateException:无法解析属性:addrId

没有映射就可以运行。但是在应用映射时无法检索记录。

hibernate打印的查询在DB中运行得非常好。

2 个答案:

答案 0 :(得分:2)

在user.hbm.xml中property-ref="addrId"应该是property-ref="userId",因为property-ref正在讨论如何将地址连接到用户,而不是相反,这是令人困惑的。你可以省略property-ref,因为没有它,Address会通过指向主键的外键找到User。 docs说“如果未指定,则使用关联类的主键”(第5.1.13节)。

答案 1 :(得分:0)

我认为它不符合int值......我必须要Integer ...

你可以这样改变吗?:

private int addrId;

private Integer addrId;
所有int变量的

等等......