gpt4 book ai didi

java - 继承表的外键名称

转载 作者:行者123 更新时间:2023-12-01 22:50:30 25 4
gpt4 key购买 nike

我有一个包含外键并使用 TABLE_FOR_CLASS 作为继承策略的基本实体。并且有一些从该类扩展的子类,因此这些子类包含相同的外键引用。

由于我公司的标准,我不允许共享代码。

我想为该外键指定一个名称,因为自动生成的外键名称超过 30 个字符,这会导致 Oracle 12c 中出现错误,并且 hibernate 无法创建表。

当我在基类中使用 @ForeignKey(name="FK_XXX") 时,子类中的外键名称变为“FK_XXX9091321asdasdasdas”等。它将生成的名称附加到基类的外键名称中。

如何解决这个问题?正如我所暗示的,我的实际问题是当 hibernates 自动生成时具有超过 30 个字符的外键名称,这在 Oracle 12 中是不允许的。

最佳答案

由于您的外键将出现在许多表中,并且它的每次出现对于数据库来说都是唯一的,因此您应该为所有子类覆盖它,因此下面的注释应放置在具有唯一外键名称的每个子类上方。我假设 BaseClass 中指向相关实体的字段称为 entityField

@AssociationOverride(name = "entityField", 
foreignKey = @ForeignKey(name="FK_XXX1"))
public class MySubclass extends BaseClass {
// ...
}

请注意,AssociationOverride.foreignKey 是在 JPA 2.1 中添加的,并且无法与以前的版本一起编译。

或者,您可以实现 Hibernate 的自定义命名策略(这可能是您的最佳选择,因为您在其他方面也会遇到类似的问题),有关详细信息,请参阅 here .

关于java - 继承表的外键名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24797688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com