Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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 如何将EmbeddedId中的外键设置为其他EmbeddedId实体_Java_Spring Boot_Jpa - Fatal编程技术网

Java 如何将EmbeddedId中的外键设置为其他EmbeddedId实体

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

我的课堂热情是问题的核心。我想要一组类SWEntityRow,它是SWEntity的一个细节(一个实体有许多行)。SWentity在embeddedId区域和过程中还有另外两个类。当我尝试使用SWEntityRowId将SWEntity映射为SWEntityRow时,我会得到不同的错误

你知道我怎么把斯文蒂罗维德和斯文蒂联系起来吗

这是ER的简化图:

这是我的简化课程:

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注释。