我是新来的冬眠 我想将孩子添加到现有的父实体中
@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中的现有父级的子级实体中添加新行,以及如何更新,删除现有父级的子级行
谢谢.. !!
答案 0 :(得分:0)
您可以在kanban_columns
方法中创建createTask
的新实例,因此新行将添加到数据库中。您应该找到具有相关任务的现有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);
}