@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(), но мой объект уже находится в управляемом состоянии.
Должен ли я вручную сохранить элемент? я думаю, если я установлю каскад, спящий режим автоматически сохранит моего ребенка
Я изучаю Hibernate (v. 6.6.1 Final) и у меня возникла проблема [list] [*]У меня есть два класса сущностей [/list] Человек [code]@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 } [/code] Элемент [code]@Entity @Table(name = "Item") public class Item {
// constructors, getters and setters ... } [/code] [list] [*]одна запись в таблице Person [b]{ id: 13, name: " Тестируемый человек", возраст: 77 [/b]
[*]Затем я беру этого человека из базы данных -> создаю новый элемент -> и добавить этот элемент к моему человеку, но спящий режим генерирует только SQL-запрос SELECT для получения человека из базы данных и никакой запрос INSERT для дочернего элемента;
[code] session.beginTransaction();
Person person = session.get(Person.class, 13); Item item = new Item("TEST item"); person.saveItem(item);
session.getTransaction().commit(); [/code] Я не понимаю, почему, потому что, когда я получаю объект (человека) из базы данных (постоянное/управляемое состояние) и устанавливаю CascadeType для дочернего элемента; я думаю, что Hibernate автоматически сохранит мой дочерний элемент, что приведет к смене человека объекта; поэтому мой вопрос в том, почему мой дочерний элемент не сохраняется и как правильно настроить его для сохранения дочернего элемента при изменении родительского элемента ?
[*]попробуйте CascadeType.ALL вместо CascadeType.PERSIST, это работает, но CascadeType.ALL мне кажется излишним [*] попробуйте вызвать session.persist(), но мой объект уже находится в управляемом состоянии. Должен ли я вручную сохранить элемент? я думаю, если я установлю каскад, спящий режим автоматически сохранит моего ребенка [/list]
У меня есть сущность Transaction, которая имеет несколько частных TransactionLeg. Я запускаю запрос, который возвращает список ветвей (не транзакций), и затем я хочу получить родительский элемент. В некоторых случаях это не удается, как описано...
Я разрабатываю приложение с использованием SpringBoot и Hibernate. Проблема: когда я удаляю содержащийся объект, это действие не отражается в реальном времени на содержащем объекте, но отражается в моей базе данных. (Я думаю, что это связано с...