问题描述
我没有看到我的错误,在对stackoverflow和Google进行研究之后,我认为代码应该是正确的。但是Hibernate(spring-boot-starter-data-jpa 2.2.4)仍然用null
填充JoinColumns。
这是我的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
}
我的EmbeddedId
班:
@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
}
最后是我的ManyToOne
类:
@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
和idint
)用作组合的primaray键。
当我创建TableAEntity
对象时,我将几个TableBEntity
对象添加到tableBentries
属性中。并且为每个TableBEntity
设置对TableAEntity
的引用(属性tableA
)。当然,MyId
(属性id
)对象也已填充。
保存TableAEntity
对象后,Hibernate还存储所有TableBEntity
,但字段id
,iddate
和idint
(所有JoinColumn的字段)为{{1 }}。
有什么主意吗?
解决方法
我的@Id
中的TableBEntity
似乎引起了问题。如果我将其移至另一个属性,它将起作用。