Java Hibernate(Spring JPA):@ManyToOne JoinColumns(一个嵌入ID)为空
我没有看到我的错误,在研究了stackoverflow和Google之后,我认为代码应该是正确的。但是Hibernate(spring boot starter数据jpa 2.2.4)仍然用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
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”作为列。我猜它会自动保存所有三个字段。