Hibernate:在以一对一关系获取对象时返回null

时间:2018-05-01 16:41:14

标签: java hibernate sqlite

每当我尝试获取连接对象时,它返回null。示例代码如下:

表A

id
name
b_id

表B

id
name

编码

@Entity
@Table(name = "A")
public class A {
    private Integer id;
    @OneToOne
    @JoinColumn(name = "b_id", nullable = false)
    private B b;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Integer getId() {
        return id;
    }

    public B getb() {        
        return b;
    }
}

@Entity
@Table(name = "B")
public class B {
    private Integer id;
    private String name;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Integer getId() {
        return id;
    }

    public String getname() {        
        return name;
    }
}

当我使用getA(id).getB()函数时,它返回null。当我使用getA时,它返回一个有效的对象而不是null。

4 个答案:

答案 0 :(得分:0)

你必须移动你的@Id和@GeneratedValue(策略= GenerationType.IDENTITY) 并放在你的id变量之上。

@Entity
@Table(name = "A")

public class A{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@OneToOne
@JoinColumn(name = "b_id", nullable = false)
private B b;

public Integer getId() {
    return id;
}

public B getb() {

    return b;
}
}

希望这会有所帮助。

答案 1 :(得分:0)

可能是你应该在joinColumn注释中将FetchType作为Eager给出,以便在加载时也加载对象B.

答案 2 :(得分:0)

您可以考虑使用更多注释属性,例如:

@OneToOne(cascade = CascadeType.ALL)
@JoinColum(name = "b_id" referencedColumnName = "id", nullable = false)
private B b;

答案 3 :(得分:0)

@Entity
@Table(name = "B")

public class B{
**@Column(name="b_id", nullable=false)**
private Integer id;
private String name;


@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)

public Integer getId() {
    return id;
}

public String getname() {

    return name;
}
}

使用@Column(name =" b_id",nullable = false)