【问题标题】:Hibernate one-to-one mappingHibernate 一对一映射
【发布时间】:2012-04-21 23:08:43
【问题描述】:

我在休眠一对一映射中遇到问题。谷歌了很多,但无法解决。

这里是数据库

以下是我的模型类

公共类用户{

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 中运行良好。

【问题讨论】:

  • 您需要提供更多详细信息。 addrId 的 getter 和 setter,Address 的映射文件,两者的 sql 结构。
  • 如您所说,我进行了编辑以提供详细信息。

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


【解决方案1】:

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

【讨论】:

  • 我删除了 property-ref 属性,它可以工作。谢谢吉姆。
【解决方案2】:

我认为它不适用于 int 值...我认为它们必须是 Integer...

你可以这样改变吗?:

private int addrId;

进入

private Integer addrId;

对于所有 int 变量,依此类推...

【讨论】:

  • 问题不在于 int。单独使用用户或地址时,它可以正常工作。问题在于映射。即这里
猜你喜欢
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
  • 2022-01-03
  • 1970-01-01
相关资源
最近更新 更多