Hibernate: возвращает ноль при получении объекта в отношении один к одному - PullRequest
0 голосов
/ 01 мая 2018

Всякий раз, когда я пытаюсь получить объединенный объект, он возвращает ноль. Пример кода ниже:

Таблица 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(), она возвращает ноль. Когда я использую getA, он возвращает действительный объект, а не ноль.

Ответы [ 4 ]

0 голосов
/ 01 мая 2018
@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)

0 голосов
/ 01 мая 2018

Может быть, вы должны указать FetchType как Eager в аннотации joinColumn, чтобы получить объект B, также загружаемый при загрузке a.

0 голосов
/ 01 мая 2018

Можно рассмотреть возможность использования дополнительных свойств аннотации, например:

@OneToOne(cascade = CascadeType.ALL)
@JoinColum(name = "b_id" referencedColumnName = "id", nullable = false)
private B b;
0 голосов
/ 01 мая 2018

Вы должны переместить свои @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;
}
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...