Почему Hibernate не сохраняет новый дочерний объект в отношении OneToManyJAVA

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

Сообщение Anonymous »

Я изучаю Hibernate (v. 6.6.1 Final) и у меня возникла проблема
  • У меня есть два класса сущностей
Человек

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

@Entity
@Table(name = "person")
public class Person {
@Id
@Column(name = "id")
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "java_seq_generator_person"
)
@SequenceGenerator(
name = "java_seq_generator_person",
sequenceName = "person_id_sequence",
allocationSize = 1
)
private int id;
@Column(name = "name",nullable = false)
private String name;
@Column(name = "age")
private int age;

@OneToMany(mappedBy = "owner", cascade = CascadeType.PERSIST)
private List items;

// save item method
public void saveItem(Item item) {
if (this.items == null) {
this.items = new ArrayList();
}
item.setOwner(this);
this.items.add(item);
}
// constructors, getters and setters
}
Элемент

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

@Entity
@Table(name = "Item")
public class Item {

@Id
@Column(name = "id")
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "java_seq_generator_item"
)
@SequenceGenerator(
name = "java_seq_generator_item",
sequenceName = "item_id_sequence",
allocationSize = 1
)
private int id;

@ManyToOne
@JoinColumn(name = "person_id", referencedColumnName = "id")
private Person owner;

@Column(name = "item_name", nullable = false)
private String itemName;

// constructors, getters and setters
...
}
  • одна запись в таблице Person
    { id: 13,
    name: " Тестируемый человек",
    возраст: 77
  • Затем я беру этого человека из базы данных -> создаю новый элемент -> и добавить этот элемент к моему человеку, но спящий режим генерирует только SQL-запрос SELECT для получения человека из базы данных и никакой запрос INSERT для дочернего элемента;

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

     session.beginTransaction();
    
    Person person = session.get(Person.class, 13);
    Item item = new Item("TEST item");
    person.saveItem(item);
    
    session.getTransaction().commit();
    
    Я не понимаю, почему, потому что, когда я получаю объект (человека) из базы данных (постоянное/управляемое состояние) и устанавливаю CascadeType для дочернего элемента; я думаю, что Hibernate автоматически сохранит мой дочерний элемент, что приведет к смене человека объекта;
    поэтому мой вопрос в том, почему мой дочерний элемент не сохраняется и как правильно настроить его для сохранения дочернего элемента при изменении родительского элемента ?
  • попробуйте CascadeType.ALL вместо CascadeType.PERSIST, это работает, но CascadeType.ALL мне кажется излишним
  • попробуйте вызвать session.persist(), но мой объект уже находится в управляемом состоянии.
    Должен ли я вручную сохранить элемент? я думаю, если я установлю каскад, спящий режим автоматически сохранит моего ребенка


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему Hibernate не сохраняет новый дочерний объект в отношении OneToMany
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Почему Hibernate не сохраняет новый дочерний объект в отношении OneToMany
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Класс org.hibernate.mapping.OneToMany не может быть приведен к классу org.hibernate.mapping.ToOne находится в безымянном
    Anonymous » » в форуме JAVA
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous
  • Загрузка родителя из дочернего элемента в отношении @OneToMany
    Anonymous » » в форуме JAVA
    0 Ответы
    44 Просмотры
    Последнее сообщение Anonymous
  • Объект удаления Hibernate OneToMany не работает
    Anonymous » » в форуме JAVA
    0 Ответы
    47 Просмотры
    Последнее сообщение Anonymous

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