2012-04-09 158 views
0

我在休眠一对一映射时遇到了一个问题。 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中运行得非常好。

+0

您需要提供更多详细信息。 addrId的getter和setter,Address的映射文件,两者的sql结构。 – Jim 2012-04-09 15:46:34

+0

我编辑提供的细节,如你所说。 – Ammar 2012-04-09 17:10:29

回答

2

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

+0

我删除了property-ref属性,它的工作原理。谢谢吉姆。 – Ammar 2012-04-10 03:41:39

0

我不认为它的工作与int价值观......我的事情,他们必须Integer ...

你可以改变这样的?:

private int addrId; 

private Integer addrId; 

等等全部int变量...

+0

问题不在于int。单独与用户或地址一起完成时,它可以正常工作。问题在于映射。即这里<一对一名称=“地址”属性 - ref =“addrId”class =“地址”级联=“所有”/> – Ammar 2012-04-09 16:55:30