休眠Spring JPA:@ManyToOne JoinColumns是EmbeddedId为null

问题描述

我没有看到我的错误,在对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
}

如您所见,我想在两个表中将属性(ididdateidint)用作组合的primaray键。

当我创建TableAEntity对象时,我将几个TableBEntity对象添加到tableBentries属性中。并且为每个TableBEntity设置对TableAEntity的引用(属性tableA)。当然,MyId(属性id)对象也已填充。

保存TableAEntity对象后,Hibernate还存储所有TableBEntity,但字段ididdateidint(所有JoinColumn的字段)为{{1 }}。

有什么主意吗?

解决方法

我的@Id中的TableBEntity似乎引起了问题。如果我将其移至另一个属性,它将起作用。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...