Java 如何将EmbeddedId中的外键设置为其他EmbeddedId实体
我的课堂热情是问题的核心。我想要一组类SWEntityRow,它是SWEntity的一个细节(一个实体有许多行)。SWentity在embeddedId区域和过程中还有另外两个类。当我尝试使用SWEntityRowId将SWEntity映射为SWEntityRow时,我会得到不同的错误 你知道我怎么把斯文蒂罗维德和斯文蒂联系起来吗 这是ER的简化图: 这是我的简化课程:Java 如何将EmbeddedId中的外键设置为其他EmbeddedId实体,java,spring-boot,jpa,Java,Spring Boot,Jpa,我的课堂热情是问题的核心。我想要一组类SWEntityRow,它是SWEntity的一个细节(一个实体有许多行)。SWentity在embeddedId区域和过程中还有另外两个类。当我尝试使用SWEntityRowId将SWEntity映射为SWEntityRow时,我会得到不同的错误 你知道我怎么把斯文蒂罗维德和斯文蒂联系起来吗 这是ER的简化图: 这是我的简化课程: SWentity ----------- @Entity public class SWEntity { @Embe
SWentity
-----------
@Entity
public class SWEntity {
@EmbeddedId
private SWEntityId id;
[...]
}
SWEntityId
-------------
@Embeddable
public class SWEntityId implements Serializable{
private static final long serialVersionUID = 1L;
@NotNull
private String name;
@NotNull
private int version;
@ManyToOne
@JoinColumn(name = "areaName", nullable = false)
@JsonIgnore
private Area area;
@ManyToOne
@JoinColumn(name = "procedureName", nullable = false)
@JsonIgnore
private Procedure procedure;
}
SWEntityRow
---------------
@Entity
public class SWEntityRow{
@EmbeddedId
private SWEntityRowId sWEntityRowId;
}
SWEntityRowId
---------------
@Embeddable
public class SWEntityRowId implements Serializable {
private static final long serialVersionUID = 1L;
private String rowName;
//SWEntityId
@ManyToOne
@JoinColumns({
@JoinColumn(name="name_row", referencedColumnName="name"),
@JoinColumn(name="version_row", referencedColumnName="version"),
@JoinColumn(name="area_row", referencedColumnName="area_name"),
@JoinColumn(name="procedure_row", referencedColumnName="procedure_name"
})
}
只需要一个改变
@Entity
public class SWEntity {
@Id
@EmbeddedId
private SWEntityId id;
[...]
}
这就解决了我的问题
@ JoinColumns({
@JoinColumn(name="entityname", referencedColumnName="name"),
@JoinColumn(name="entityversion", referencedColumnName="version"),
@JoinColumn(name="entityarea", referencedColumnName="AreaName"),
@JoinColumn(name="entityprocedure", referencedColumnName="ProcedureName")
})
不同之处在于referencedColumnName=“AreaName”与referencedColumnName=“area\u name”的区别,而过程也是如此
谢谢 你会犯什么错误?你能把实体的全部代码加上Stacktrace贴出来吗?正确!!!;)我也需要更改:@ManyToOne@JoinColumns({@JoinColumn(name=“entity\u row”,referencedColumnName=“name”),@JoinColumn(name=“entity\u version”,referencedColumnName=“version”),@JoinColumn(name=“entity\u procedure”,referencedColumnName”),@JoinColumn(name=“entity\u procedure”,referencedColumnName)=“ProcedureName”)})很抱歉,但答案并不像我最初认为的那样正确。来自EmbbedID:“当使用EmbeddedId注释时,必须只有一个EmbeddedId注释,并且没有Id注释。