Ассоциация Hibernate OneToOne, владеющая сторона не сохраняет внешний ключJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Ассоциация Hibernate OneToOne, владеющая сторона не сохраняет внешний ключ

Сообщение Anonymous »

Я изучаю Hibernate (финальная версия 6.6.1), и у меня возникла проблема с отношением OneToOne
  • Клиент Сущность

Код: Выделить всё

@Entity
@Table(name = "customer")
public class Customer {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "name")
private String name;
@Column(name = "age")
private int age;

@OneToOne(mappedBy = "customer", cascade = CascadeType.PERSIST)
private Passport passport;
// constructors, getters and setters
}
  • Субъект паспорта

Код: Выделить всё

@Entity
@Table(name = "passport")
public class Passport {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "passport_number")
private String passportNumber;

@OneToOne
@JoinColumn(name = "customer_id", referencedColumnName = "id")
private Customer customer;
//constructors, getters and setters
}
  • Я настраиваю отношение OneToOne

Код: Выделить всё

try {

session.beginTransaction();

Customer customer = new Customer("Customer 1", 77);
Passport passport = new Passport("777");

customer.setPassport(passport);
session.persist(customer);

session.getTransaction().commit();
}
finally {
factory.close();
}
И после этого в базе данных сохраняется:
Клиент {id: 1, имя: "Клиент 1", возраст: 77}< /strong>
и
Паспорт {id: 1, Passport_number: "777", customer_id: null
< /p>
Почему гибернация не сохраняет customer_id, если я настраиваю отношение?
Если я привязываюсь с обеих сторон, то все ок

Код: Выделить всё

try {

session.beginTransaction();

Customer customer = new Customer("Customer 1", 77);
Passport passport = new Passport("777");

passport.setCustomer(customer);
customer.setPassport(passport);

session.persist(customer);

session.getTransaction().commit();
}
finally {
factory.close();
}
Почему я должен вручную устанавливать связь с каждым объектом, если я настраиваю связь? Почему спящий режим не сохраняет customer_id, а сохраняет объект Passport?
Если я связываю отношение с обеих сторон, это работает, но почему спящий режим не сохраняет автоматически мой ключ fk?

Подробнее здесь: https://stackoverflow.com/questions/791 ... oreing-key
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»