【问题标题】:How to do one to one hibernate mapping, using a non-primary key as references如何使用非主键作为参考进行一对一的休眠映射
【发布时间】:2012-02-01 14:05:09
【问题描述】:

我正在尝试为表的一对一关系进行 XML Hibernate 映射

用户(用户 ID、名称、状态 ID) 状态(StatusId、StatusName)

我尝试了我在论坛上找到的这个

在 User.hbm.xml 下

  <many-to-one class="Status" name="statusid" property-ref="statusid">
    <column name="statusname" />
  </many-to-one>

因为这个我得到了这个错误

严重:初始 SessionFactory 创建失败。java.lang.NullPointerException 警告:StandardWrapperValve [默认]:PWC1406:Servlet.service() 用于 servlet 默认抛出异常 java.lang.ExceptionInInitializerError

当我使用 PK 作为参考时,我没有收到此错误..

谁能解释一下这个属性是什么意思,为什么会出现这个错误? PS:我正处于学习阶段,请大家帮忙>.

【问题讨论】:

  • 您能否发布错误的完整堆栈跟踪?
  • 标题中写着“一对一”。我猜你的意思是多对一?除非您希望每个用户都有不同的状态?

标签: hibernate nhibernate-mapping


【解决方案1】:

如果你没有什么特别的东西,下面的映射应该可以工作。尽管如此,拥有完整的堆栈跟踪总是有帮助的。

  <many-to-one class="Status" name="statusid" column="StatusId" />

【讨论】:

    【解决方案2】:

    哦,你真的想加入User.statusid = Status.statusname吗?这意味着 statusname 是 Status 的备用键。

    在您的 property-ref 中,您需要设置您引用的 Status 对象的属性。 见Associations on Alternate Keys

    <many-to-one class="Status" name="statusid" property-ref="statusname"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多