В настоящее время я застрял в вопросе обновления поля родительского объекта и получения каскадного обновления для всех его дочерних полей.
Вот пример того, что я пытаюсь выполнить sh:
Пользователь . java
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(nullable = false, columnDefinition = "TINYINT(1) default false")
private Boolean archived = Boolean.FALSE;
@OneToMany(mappedBy = "user")
private Set<Invoice> invoices = new HashSet<Invoice>();
// Setters & Getters
}
Счет . java
@Entity
public class Invoice{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(nullable = false, columnDefinition = "TINYINT(1) default false")
private Boolean archived = Boolean.FALSE;
@ManyToOne(mappedBy = "invoices")
@JoinColumn(nullable = false)
private User user;
// Setters & Getters
}
При обновлении архива значение до true
. Я хочу, чтобы все счета также обновлялись до true
.
IE
public Boolean archiveUserById(Integer id) {
User user= entity_manager.find(User.class, id);
Boolean result = false;
if(auction != null) {
// This should cascade to all the invoices as well and update their archived fields to true as well
user.setArchived(true);
try {
entity_manager.getTransaction().begin();
entity_manager.merge(auction);
entity_manager.getTransaction().commit();
result = true;
} catch(Exception e) {
e.printStackTrace();
}
}
return result;
}
Я пытался использовать cascade = CascadeType.PERSIST
и @JoinTable(....)
со всеми ссылочными столбцами, но они по-прежнему не могут корректно обновить поля.
Чтобы уточнить, есть ли способ обновить поле ребенка с помощью обновления его родителей с помощью каскадного эффекта?
Спасибо за помощь .
РЕДАКТИРОВАТЬ
Чтобы прояснить вопрос, я пытаюсь добавить каскадный эффект ограничения, когда поле родительской сущности обновляется, чтобы отразить на той же дочерней сущности поле. Я пытаюсь избежать каких-либо логи c внутри самой сущности. Есть ли способ сделать это только с помощью аннотаций?
Что-то с таким же эффектом, как это:
ALTER TABLE `child` ADD CONSTRAINT `childs-archived-mirrors-parent`
FOREIGN KEY (`archived`, `parentId`)
REFERENCES `parent`(`archived`, `id`)
ON DELETE RESTRICT ON UPDATE CASCADE;