Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 继承表的外键名称_Java_Sql_Oracle_Hibernate_Jpa - Fatal编程技术网

Java 继承表的外键名称

Java 继承表的外键名称,java,sql,oracle,hibernate,jpa,Java,Sql,Oracle,Hibernate,Jpa,我有一个基本实体,它包含一个外键,并使用表\u作为继承策略。还有一些子类从这个类扩展而来,所以这些子类包含相同的外键引用 由于我公司的标准,我不允许共享代码 我想为该外键命名,因为自动生成的外键名称超过30个字符,这会导致Oracle 12c中出现错误,hibernate无法创建表 当我在基类中使用@ForeignKey(name=“FK_XXX”)时,子类中的外键名变为“FK_xxx9091321asdasdas”等。它将生成的名称附加到基类的外键名 我怎样才能解决这个问题?正如我所暗示的,我

我有一个基本实体,它包含一个外键,并使用表\u作为继承策略。还有一些子类从这个类扩展而来,所以这些子类包含相同的外键引用

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

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

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


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

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

@AssociationOverride(name = "entityField", 
                     foreignKey = @ForeignKey(name="FK_XXX1"))
public class MySubclass extends BaseClass {
    // ...
}
请注意,
AssociationOverride.foreignKey
是在JPA2.1中添加的,不会使用以前的版本编译


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

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

@AssociationOverride(name = "entityField", 
                     foreignKey = @ForeignKey(name="FK_XXX1"))
public class MySubclass extends BaseClass {
    // ...
}
请注意,
AssociationOverride.foreignKey
是在JPA2.1中添加的,不会使用以前的版本编译


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

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

@AssociationOverride(name = "entityField", 
                     foreignKey = @ForeignKey(name="FK_XXX1"))
public class MySubclass extends BaseClass {
    // ...
}
请注意,
AssociationOverride.foreignKey
是在JPA2.1中添加的,不会使用以前的版本编译


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

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

@AssociationOverride(name = "entityField", 
                     foreignKey = @ForeignKey(name="FK_XXX1"))
public class MySubclass extends BaseClass {
    // ...
}
请注意,
AssociationOverride.foreignKey
是在JPA2.1中添加的,不会使用以前的版本编译



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

您不必共享代码,只需编写一个最小的示例……您不必共享代码,只需编写一个最小的示例…您不必共享代码,只需编写一个最小的示例…您不必共享代码,只需编写一个最小的示例…这对我不起作用,它甚至无法编译。有没有其他方法可以做到这一点?
不兼容的类型:找到字符串所需的约束模式
这会编译但不会覆盖名称
@AssociationOverride(name=“param”,joinColumns=@JoinColumn(foreignKey=@foreignKey(name=“FK_key_id”))
@iberbeu我已经更新了答案,感谢您指出
name
参数在
ForeignKey
注释中的不足。您是否知道此注释仅在创建数据库/生成DDL阶段时生效?如果将
hibernate.ddl auto
设置为
create
create drop
它应该可以工作,但对我来说也不起作用。我正在使用
hibernate5
hibernatemaven插件
生成ddl。一切似乎都正常,但是这个插件在尝试创建ddl时抛出了一个异常。如果您可以在没有此插件的情况下生成ddl,那么在
hibernate maven plugin
中可能会出现问题。这对我不起作用,它甚至无法编译。有没有其他方法可以做到这一点?
不兼容的类型:找到字符串所需的约束模式
这会编译但不会覆盖名称
@AssociationOverride(name=“param”,joinColumns=@JoinColumn(foreignKey=@foreignKey(name=“FK_key_id”))
@iberbeu我已经更新了答案,感谢您指出
name
参数在
ForeignKey
注释中的不足。您是否知道此注释仅在创建数据库/生成DDL阶段时生效?如果将
hibernate.ddl auto
设置为
create
create drop
它应该可以工作,但对我来说也不起作用。我正在使用
hibernate5
hibernatemaven插件
生成ddl。一切似乎都正常,但是这个插件在尝试创建ddl时抛出了一个异常。如果您可以在没有此插件的情况下生成ddl,那么在
hibernate maven plugin
中可能会出现问题。这对我不起作用,它甚至无法编译。还有别的办法吗