JPA OnetoOne映射返回null

时间:2017-07-31 12:09:38

标签: java hibernate jpa

我在DB中有以下表格:

material (id_mat, name, initial_weight, cargo_number, exp_date, left_amount)

我必须添加一个附加表,该表显示使用material表中的材料构建的结构。在这里看起来如何:

material_construction (mat_id, construction_number)

然后我为表MatConstructionMapping创建了一个名为material_construction的实体类:

@Entity(name = "material_construction")
public class MatConstructionMapping implements Serializable {

    private static final long serialVersionUID = 1739614249257235075L;

    @Id
    @OneToOne
    @JoinColumn(name = "mat_id", referencedColumnName = "id_mat", insertable=false, updatable=false)
    private Material mat;

    @Column(name="construction_number")
    private Integer number;

    public Integer getConNumber() {
        return number;
    }
}

并且,在Material实体中添加了getter:

@OneToOne
@JoinColumn(name = "mat_id")
public MatConstructionMapping getMaterialConstructionNumber() {
    return conNumber;
}

问题在于,当我检索任何材料的conNumber时,它总是null,但是数据库中有值。我究竟做错了什么?

1 个答案:

答案 0 :(得分:1)

你不能在两边都有JoinColumn,@ JoinColumn应该在你可以在一对一关系的任何一侧定义的拥有实体,另一边应该有mappedBy属性来指示反向关系,例如MatConstructionMapping是拥有实体,那么你应该编辑你的材料

@OneToOne(mappedBy="mat")
public MatConstructionMapping getMaterialConstructionNumber() {
  return conNumber;
}