我有一个与另一个实体“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
我知道这是正确的,但也许有一种解决方法?
请不要因为数据模型而责备我: - )
答案 0 :(得分:0)
您可以在@NotFound(action = NotFoundAction.IGNORE)
媒体资源上使用B.a
注释。但这只有在阅读协会时才有效。如果您希望能够将B.a
设置为null,并使其在数据库中插入-1而不是null,我不知道。
答案 1 :(得分:0)
我知道在数年和数年之后将数据模型颠倒过来并不是在公园散步。特别是因为您必须查看每个附加应用程序的每个角落,以此类推,看看它是否受到影响。这是一个外键,很有可能改变它会影响很多事情,或者至少会有很大的影响。
那说它可能仍然很好地与负责使用某些构造的DBA交谈
Oracle数据库(最新版本)有一些选项,如可更新视图和伪列等等。我自己不是DBA,但我看到使用伪列的一些潜力,例如它可以作为外键(朝向表/实体A)列的副本,除非它会
如果您更改Hibernate / JPA设置以使用该列而不是原始列..
我希望你有一位经验丰富的DBA,更重要的是 - 不用担心尝试(当然是在测试环境中)。
祝你好运! 维姆