【问题标题】:Null object if entity not found如果未找到实体,则为空对象
【发布时间】:2012-04-27 08:21:27
【问题描述】:

我正在使用 Hibernate 和 JPA。我有一个名为Customer 的实体,它引用了ParentCustomer

public class Customer {
    @Id
    @GeneratedValue
    @Column(name = "CustomerID")
    private int id;

    @ManyToOne
    @JoinColumn(name = "ParentCustomerID")
    private Customer parent;

    // ...
}

但在我的数据库中,有些客户没有父级,因此 ParentCustomerID 设置为 0。我在测试我的课程时遇到的异常是:

javax.persistence.EntityNotFoundException: Unable to find it.keyforup.pat.data.entities.Customer with id 0

当 id 为 0 时,有没有办法将 ParentCustomer 设置为 null

【问题讨论】:

  • 你为什么说0?如果您希望实体为null,则外键值应为null
  • 我正在处理第三方应用程序使用的数据库,当客户没有父级时,此应用程序将父级 ID 设置为 0...所以我会确保每次未找到父级 parent 属性设置为 null。
  • 但是这不是合法的数据库行为。此外,如果暗示了严格的数据库限制验证,他们甚至无法做到这一点..
  • 我假设你正在使用键列 primitive 类型,这就是为什么插入 0 而不是 NULL 它不像stackoverflow.com/q/10110081/507864所说的那么好。

标签: java hibernate jpa


【解决方案1】:

试试这个

@ManyToOne
@JoinColumn(name = "ParentCustomerID")
@NotFound(action = NotFoundAction.IGNORE)
private Customer parent;

【讨论】:

  • 这是在我发布的完全相同的副本中提出的。
  • 碰巧的是,我过去遇到过这个问题并通过 notfound 注释解决了,所以当我看到线程时 - 它有点在跑步机上 - 决定直接发布答案在有人打败我之前离开。第一手没有看到重复的帖子 - 好电话。
猜你喜欢
  • 2015-12-02
  • 2023-02-08
  • 2021-07-09
  • 1970-01-01
  • 2011-02-08
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多