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

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

Сообщение Anonymous »

Я изучаю Hibernate (v. 6.6.1 Final), и у меня возникла проблема в отношении OneToOne
  • Customer Entity

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

@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>
Почему бы не перейти в спящий режим, чтобы не сохранить person_id, если я настрою отношение?
но если я привяжу с обеих сторон, то все будет ок< /p>

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

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»