Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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(Spring JPA):@ManyToOne JoinColumns(一个嵌入ID)为空_Java_Spring_Hibernate_Many To One_Joincolumn - Fatal编程技术网

Java Hibernate(Spring JPA):@ManyToOne JoinColumns(一个嵌入ID)为空

Java Hibernate(Spring JPA):@ManyToOne JoinColumns(一个嵌入ID)为空,java,spring,hibernate,many-to-one,joincolumn,Java,Spring,Hibernate,Many To One,Joincolumn,我没有看到我的错误,在研究了stackoverflow和Google之后,我认为代码应该是正确的。但是Hibernate(spring boot starter数据jpa 2.2.4)仍然用null填充join列 这是我的OneToMany课程: @Entity @Table(name = "tablea", schema = "") public class TableAEntity implements Serializable { priv

我没有看到我的错误,在研究了stackoverflow和Google之后,我认为代码应该是正确的。但是Hibernate(spring boot starter数据jpa 2.2.4)仍然用
null
填充join列

这是我的
OneToMany
课程:

@Entity
@Table(name = "tablea", schema = "")
public class TableAEntity implements Serializable {

    private static final long serialVersionUID = 7890327260188587351L;

    @EmbeddedId
    private MyId id;
    
    @OneToMany(cascade = ALL, mappedBy = "tableA", orphanRemoval = true, fetch = FetchType.LAZY)
    private List<TableBEntity> tableBentries;
    
    // Getter + Setter
}
@Embeddable
public class MyId implements Serializable {

    private static final long serialVersionUID = -8267953052238233498L;

    @Column(name = "id")
    private String id;

    @Column(name = "iddate")
    private Date iddate;

    @Column(name = "idint")
    private BigInteger idint;
    
    // Getter + Setter
}
@Entity
@Table(name = "tableB", schema = "")
public class TableBEntity implements Serializable {

    private static final long serialVersionUID = -4648090658471459969L;

    @Id
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumns({
        @JoinColumn(name = "id", referencedColumnName = "id"),
        @JoinColumn(name = "iddate", referencedColumnName = "iddate"),
        @JoinColumn(name = "idint", referencedColumnName = "idint")
    })
    private TableAEntity tableA;
    
    // Some other attributes
    
    // Getter + Setter
}
最后是我的
manytone
课程:

@Entity
@Table(name = "tablea", schema = "")
public class TableAEntity implements Serializable {

    private static final long serialVersionUID = 7890327260188587351L;

    @EmbeddedId
    private MyId id;
    
    @OneToMany(cascade = ALL, mappedBy = "tableA", orphanRemoval = true, fetch = FetchType.LAZY)
    private List<TableBEntity> tableBentries;
    
    // Getter + Setter
}
@Embeddable
public class MyId implements Serializable {

    private static final long serialVersionUID = -8267953052238233498L;

    @Column(name = "id")
    private String id;

    @Column(name = "iddate")
    private Date iddate;

    @Column(name = "idint")
    private BigInteger idint;
    
    // Getter + Setter
}
@Entity
@Table(name = "tableB", schema = "")
public class TableBEntity implements Serializable {

    private static final long serialVersionUID = -4648090658471459969L;

    @Id
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumns({
        @JoinColumn(name = "id", referencedColumnName = "id"),
        @JoinColumn(name = "iddate", referencedColumnName = "iddate"),
        @JoinColumn(name = "idint", referencedColumnName = "idint")
    })
    private TableAEntity tableA;
    
    // Some other attributes
    
    // Getter + Setter
}
正如您可能看到的,我希望将属性(
id
iddate
idit
)用作两个表中的组合primaray键

创建
tableEntity
对象时,我将几个
tablebenty
对象添加到
tableBentries
属性中。对于每个
tablebenty
,我将引用设置为
tableEntity
(属性
tableA
)。当然,
MyId
(属性
id
)对象被填充

保存
tableEntity
对象后,Hibernate还存储所有
tableBenty
,但
id
iddate
idit
(所有JoinColumn)字段均为
null


有什么想法吗?

我的
表格中的
@Id
似乎是问题的根源。如果我将它移动到另一个属性,它就会工作。

也许您可以使用“private MyId”作为列。我猜它会自动保存所有三个字段。