![](/img/trans.png)
[英]Soft Delete : Child Entity not being deleted after Deleting parent Entity in @OneToMany relation in Spring Boot JPA Hibernate
[英]add child entity to an exsisting parent hibernate onetomany
我是休眠的新手,我想將孩子添加到現有的父實體
@Entity
@Table(name="kanban_col")
public class kanban_columns {
@Id
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
private String id;
@Column(name="col_name")
private String colName;
@Column(name="kbid")
private String boardId;
@OneToMany(mappedBy = "kanban_col_id",cascade = CascadeType.PERSIST,orphanRemoval = true,fetch=FetchType.LAZY)
private List<Tasks> tasks;
Getter and setters....
}
@Entity
@Table(name="kanban_tasks")
public class Tasks {
@Id
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
private String id;
@ManyToOne(fetch = FetchType.LAZY)
@JsonBackReference
@JoinColumn(name = "cid", updatable = true, insertable = true,referencedColumnName = "id")
private kanban_columns kanban_col_id;
@Column(name="work_id")
private String workId;
Getter and setters....
}
服務
@Transactional
public kanban_columns createTask(final kanban_columns source) {
final kanban_columns destination = new kanban_columns();
copyTask(source, destination);
repository.save(destination);
return destination;
}
@Transactional
public void save(final kanban_columns attachment)
{
repository.save(attachment);
}
public void copyTask(final kanban_columns source, final kanban_columns destination){
destination.setTasks(source.getTasks());
}
{
"kanban_col_id":"ff80808174f95b8c0174f95ba1e30000",
"tasks":[{
"workId":"4028ab37735ae04e01735b4833ba0000"
},
{
"workId":"4028ab37735ae04e01735b4833ba0001"
},
]
}
我正在嘗試做,但在kanban_col
中創建了一個新行,但我需要插入現有的行,請告訴我如何在子實體中為@onetomany 中的現有父級添加新行,以及如何更新、刪除現有父級的子行謝謝你..!!
您在createTask
方法中創建了kanban_columns
的新實例,因此在數據庫中添加了新行。 您應該找到具有關聯任務的現有kanban_columns
,然后將新任務添加到列表中。
您需要在存儲庫中使用一個新方法,該方法加載並返回帶有已關聯任務的 kanban_columns 實例:
@Query("select kc from kanban_columns kc left join fetch kc.tasks where kc.id = :id")
kanban_columns findByIdWithTasks(@Param("id") String id);
在kanban_columns
定義一個輔助方法:
public void addTasks(Collection<Task> tasks) {
tasks.forEach(t -> t.setKanban_column_id(this));
this.tasks.addAll(tasks);
}
您的createTask
和copyTask
方法應更改為:
@Transactional
public kanban_columns createTask(final kanban_columns source) {
final kanban_columns destination = repository.findByIdWithTasks(souce.getId());
copyTask(source, destination);
repository.save(destination);
return destination;
}
public void copyTask(final kanban_columns source, final kanban_columns destination) {
destination.addTasks(source.getTasks());
}
要刪除任務,您需要將級聯從PERSIST
更改為ALL
並在 kanban_columns 中定義類似的方法:
public void deleteTask(Task task) {
this.tasks.remove(task);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.