Java 休眠引用FK中的嵌入ID列
映射不同实体类的多个Java 休眠引用FK中的嵌入ID列,java,mysql,entity-framework,hibernate,jpa,Java,Mysql,Entity Framework,Hibernate,Jpa,映射不同实体类的多个@EmbeddedId列时遇到问题。我有一个如下的实体结构(为了可读性简化了实体) 实体:行动 此实体的@EmbeddedId定义如下: @Embeddable private class ActionId implements Serializable { @ManyToOne private Operation operation; private HttpMethod method; } 这里pk列之间的映射工作正常。当我尝试将另一个实体(链接表)
@EmbeddedId
列时遇到问题。我有一个如下的实体结构(为了可读性简化了实体)
实体:行动
此实体的@EmbeddedId
定义如下:
@Embeddable
private class ActionId implements Serializable {
@ManyToOne private Operation operation;
private HttpMethod method;
}
这里pk列之间的映射工作正常。当我尝试将另一个实体(链接表)添加到操作
实体时,就会出现问题。此链接表还有一个@EmbeddedId
实体:用户操作
@EmbeddedId
类如下所示:
@Embeddable
private class UserActionId implements Serializable {
@ManyToOne private Action action;
@ManyToOne private User user;
}
如何引用Action类的@EmbeddedId
字段,但其中只有一列是联接列。ActionId
类中的另一列是常规的@列
我试过这个:
@AssociationOverrides({
@AssociationOverride(name = "pk.action.pk.operation", joinColumns = @JoinColumn(name = "id_operation", nullable = false)) })
但这给了我一个错误:
导致:org.hibernate.MappingException:外键(FK_gwvslpytxm695kdw5lxqneyss:user_action[useraction])必须与引用的主键(useraction[id_operation,http_method])具有相同的列数
位于org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:110)
位于org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:93)
位于org.hibernate.cfg.Configuration.SecondPassCompileForeKeys(Configuration.java:1816)
位于org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1739)
位于org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1424)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)
位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
如何覆盖UserAction实体中的
ActionId
类的另一个非联接列方法
关联?我遇到了与此类似的问题,这有帮助:我遇到了与此类似的问题,这有帮助:
@Embeddable
private class UserActionId implements Serializable {
@ManyToOne private Action action;
@ManyToOne private User user;
}
@AssociationOverrides({
@AssociationOverride(name = "pk.action.pk.operation", joinColumns = @JoinColumn(name = "id_operation", nullable = false)) })