2017-07-31 257 views
-2

我在DB下表:JPA OnetoOne映射返回null

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

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

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