如何在JPA关系中设置被视为NULL的值

时间:2011-08-29 12:20:57

标签: java hibernate jpa

我有一个与另一个实体“B”具有一对多关系(1:n)的实体“A”。不幸的是,(对于多年存在的)数据库将B中的列定义为A的主键为NOT NULL,但该关系不是必需的。因此,如果没有Emtity A相关,则此列只会得到-1。

如何在JPA / Hibernate中映射?我得到以下例外:

Exception in thread "main" 
javax.persistence.EntityNotFoundException: 
Unable to find A with id -1

我知道这是正确的,但也许有一种解决方法?

请不要因为数据模型而责备我: - )

2 个答案:

答案 0 :(得分:0)

您可以在@NotFound(action = NotFoundAction.IGNORE)媒体资源上使用B.a注释。但这只有在阅读协会时才有效。如果您希望能够将B.a设置为null,并使其在数据库中插入-1而不是null,我不知道。

答案 1 :(得分:0)

我知道在数年和数年之后将数据模型颠倒过来并不是在公园散步。特别是因为您必须查看每个附加应用程序的每个角落,以此类推,看看它是否受到影响。这是一个外键,很有可能改变它会影响很多事情,或者至少会有很大的影响。

那说它可能仍然很好地与负责使用某些构造的DBA交谈

  • 保留当前数据模型
  • 让您以不同的方式访问该数据

Oracle数据库(最新版本)有一些选项,如可更新视图和伪列等等。我自己不是DBA,但我看到使用伪列的一些潜力,例如它可以作为外键(朝向表/实体A)列的副本,除非它会

  • 将每个-1值显示为null
  • 确保将值null的插入在其引用的列中转换为-1(可能通过使用触发器)

如果您更改Hibernate / JPA设置以使用该列而不是原始列..

我希望你有一位经验丰富的DBA,更重要的是 - 不用担心尝试(当然是在测试环境中)。

祝你好运! 维姆