Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
Hibernate 当一列(隐式地)引用某个其他表的一部分时,如何映射@ManyToOne’;s化合物PK?_Hibernate_Jpa_Many To One_Composite Primary Key - Fatal编程技术网

Hibernate 当一列(隐式地)引用某个其他表的一部分时,如何映射@ManyToOne’;s化合物PK?

Hibernate 当一列(隐式地)引用某个其他表的一部分时,如何映射@ManyToOne’;s化合物PK?,hibernate,jpa,many-to-one,composite-primary-key,Hibernate,Jpa,Many To One,Composite Primary Key,我正在为现有的表编写实体类,我看到有些奇怪的是,表是这样的 parent表定义了一些带有类别的代码 parent ---- category VARCHAR PK code VARCHAR PK 子表有一列,其值等于父表的代码列。 请注意,没有用于此的FK child ----- code VARCHAR - no FK for parent/category 我怀疑表设计器依赖web UI来实现完整性 说 @实体 班童{ 静态最终字符串隐式_CATEGORY=“b”; //

我正在为现有的表编写实体类,我看到有些奇怪的是,表是这样的

parent
表定义了一些带有类别的代码

parent
----
category VARCHAR PK
code     VARCHAR PK
子表有一列,其值等于父表的代码列。 请注意,没有用于此的FK

child
-----
code     VARCHAR - no FK for parent/category
我怀疑表设计器依赖web UI来实现完整性

@实体
班童{
静态最终字符串隐式_CATEGORY=“b”;
//@列(name=“code”);
//私有字符串代码;//当然可以。
@许多酮
private Parent;//我可以这样做吗?
}

如何在
Some
实体类中执行
@ManyToOne
?甚至可能吗?

代码“x”在父表中是否唯一?如果不是,看起来设计更像是多对多,一个孩子可以和许多父母联系在一起。如果它是唯一的,那么看起来可能是表设计者犯了一个错误,可能只是使用了代码作为唯一的pk;您当然可以在父实体中将其标记为您的ID——它不必与数据库完全匹配,它只是有帮助。你可以有一个复合pk,然后子代只引用代码,但这在JPA中是不允许的(它破坏了缓存),但将与提供者一起工作-你必须查看他们的文档以了解更多信息support@Chris谢谢你的评论。否
parent
表中的
code
列不是唯一的。我同意这是(另一)个问题。表设计者的错误是,他或她决定
表的
code
列可能映射
行,其
类别
列是特定的。比如说,通过Web UI,通过MyBatis的SQL。您必须使用基本映射来映射child.code字段以设置您自己(如果执行修改),但您可以将其映射为一个指定联接列(insertable/updateable=false)的OneToMany,从父级代码映射到子级代码。如果希望父表有子表,只需在另一端执行相同的操作,即设置一个只读联接列,将子表代码标记为父表代码的外键。Hibernate将有办法绕过JPA验证,因为根本没有引用完整的PK-我不太清楚,无法给出完整的答案。代码“x”在父表中是唯一的吗?如果不是,看起来设计更像是多对多,一个孩子可以和许多父母联系在一起。如果它是唯一的,那么看起来可能是表设计者犯了一个错误,可能只是使用了代码作为唯一的pk;您当然可以在父实体中将其标记为您的ID——它不必与数据库完全匹配,它只是有帮助。你可以有一个复合pk,然后子代只引用代码,但这在JPA中是不允许的(它破坏了缓存),但将与提供者一起工作-你必须查看他们的文档以了解更多信息support@Chris谢谢你的评论。否
parent
表中的
code
列不是唯一的。我同意这是(另一)个问题。表设计者的错误是,他或她决定
表的
code
列可能映射
行,其
类别
列是特定的。比如说,通过Web UI,通过MyBatis的SQL。您必须使用基本映射来映射child.code字段以设置您自己(如果执行修改),但您可以将其映射为一个指定联接列(insertable/updateable=false)的OneToMany,从父级代码映射到子级代码。如果希望父表有子表,只需在另一端执行相同的操作,即设置一个只读联接列,将子表代码标记为父表代码的外键。Hibernate将有办法绕过JPA验证,因为完整的PK根本没有被引用——我不太清楚,无法给出完整的答案。
parent table
category code
-------------
'a'      'c'
'b'      'x'
'b'      'y'

child table << this table is supposed to use 'b' category.
code
-------------
'x'             // implicitly refer 'b' - 'x'
'y'             // implicitly refer 'b' - 'y'