Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 Hibernate映射中出错“;外键引用的列数错误。应为2“;_Java_Spring_Hibernate Mapping_Spring Data Jpa_Composite Primary Key - Fatal编程技术网

Java Hibernate映射中出错“;外键引用的列数错误。应为2“;

Java Hibernate映射中出错“;外键引用的列数错误。应为2“;,java,spring,hibernate-mapping,spring-data-jpa,composite-primary-key,Java,Spring,Hibernate Mapping,Spring Data Jpa,Composite Primary Key,TRANSFORMATION表具有复合主键trans\u id和version EXPRESSION表仅包含来自trans\u id的外键引用,它没有version列 通过JUnit,当我试图保存到转换中时,我发现了以下错误 caused by: org.hibernate.AnnotationException: A Foreign key refering org.persistence.entity.Transformation from org.persistence.entity.Ex

TRANSFORMATION
表具有复合主键
trans\u id
version

EXPRESSION
表仅包含来自
trans\u id
的外键引用,它没有
version

通过JUnit,当我试图保存到
转换中时,我发现了以下错误

caused by: org.hibernate.AnnotationException: A Foreign key refering org.persistence.entity.Transformation from org.persistence.entity.Expression has the wrong number of column. should be 2
            at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:420) ~[hibernate-core-4.2.8.Final.jar:4.2.8.Final]
            at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:117) ~[hibernate-core-4.2.8.Final.jar:4.2.8.Final]
            at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1560) ~[hibernate-core-4.2.8.Final.jar:4.2.8.Final]
            at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1481) ~[hibernate-core-4.2.8.Final.jar:4.2.8.Final]
            ...
            at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:250) ~[spring-test-4.0.2.RELEASE.jar:4.0.2.RELEASE]
            at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContextInternal(CacheAwareContextLoaderDelegate.java:64) ~[spring-test-4.0.2.RELEASE.jar:4.0.2.RELEASE]
            at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:91) ~[spring-test-4.0.2.RELEASE.jar:4.0.2.RELEASE]
            ... 25 more

@实体(name=“转换”)
@表(name=“转换”)
公共类转换扩展BaseEntity实现可序列化{
私有静态最终长serialVersionUID=1L;
@嵌入ID
私有转换pkid;
/*@OneToMany(mappedBy=“转换”)
私有集表达式*/
@独身癖
@JoinColumn(name=“TRANS_ID”,nullable=false)
@Fetch(FetchMode.SUBSELECT)
私有集表达式;
}
@可嵌入
公共类TransformationPK实现可序列化{
私有静态最终长serialVersionUID=1L;
@列(name=“TRANS\u ID”)
私有字符串传输;
@列(name=“VERSION”,精度=2,刻度=1)
私有双横截;
公共转型pk(){
}
}
@实体(名称=“表达式”)
@表(name=“EXPRESSION”)
公共类表达式扩展BaseEntity实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@列(name=“Expression\u ID”)
@GeneratedValue(策略=GenerationType.AUTO)
私有字符串表达式ID;
@列(name=“TRANS\u ID”)
私有字符串传输;
/*@许多酮
@连接柱({
@JoinColumn(name=“TRANS_ID”,insertable=false,updateable=false),
@JoinColumn(name=“VERSION”,insertable=false,updateable=false)
})
私有化转型*/
@许多酮
@JoinColumn(name=“TRANS_ID”,nullable=false,insertable=false,updateable=false)
私有化转型;
}

有人能建议如何解决这个问题吗。

因为你的嵌入式PK有两列,这里你也应该有两列连接列:

@ManyToOne
@JoinColumns({  
@JoinColumn(name = "TRANS_ID", nullable = false, insertable = false, updatable = false),
@JoinColumn(name = "VERSION", ....
})
private Transformation transformation;

顺便说一句,您有双向关联转换表达式,您应该在一端添加mappedBy。

如果复合键父实体的所有PK列都不在FKs中,您就不能与复合键父实体建立多对一关系。因此,我可以使用@OneToMany集合表达式在Transformation类中添加mappedBy吗?我在javax.persistence api中读到了@associationoverride。我可以用这个来解决这个问题吗?
@ManyToOne
@JoinColumns({  
@JoinColumn(name = "TRANS_ID", nullable = false, insertable = false, updatable = false),
@JoinColumn(name = "VERSION", ....
})
private Transformation transformation;