hibernate(springjpa):@manytoonejoincolumns(一个嵌入的id)为null

643ylb08  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(521)

我没有看到我的错误,在研究了stackoverflow和google之后,我认为代码应该是正确的。但是hibernate(springbootstarter数据jpa2.2.4)仍然用 null .
这是我的 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 (所有列)都是 null .
你知道吗?

cnwbcb6i

cnwbcb6i1#

看来 @Id 在我的 TableBEntity 造成问题。如果我把它移到另一个属性,它就会工作。

相关问题