hibernate cascade:如何在保存后获得孩子的身份?

时间:2016-05-23 16:23:11

标签: java spring hibernate cascade many-to-one

我有两个实体,Task和TaskItem,它们有@ManyToOne关系,TaskItem是欠方:

在任务中:

@OneToMany(mappedBy = "task",
           cascade = CascadeType.ALL)
private @Getter @Setter Set<TaskItem> taskItems = new HashSet<TaskItem>();

在TaskItem中:

@ManyToOne(cascade = CascadeType.ALL)
@JoinTable(name = "item_task",
           joinColumns = {@JoinColumn(name = "taskItem_id", nullable = false, updatable = false)},
           inverseJoinColumns = {@JoinColumn(name = "task_id", nullable = false, updatable = false)})
private @Getter @Setter Task task;

我的测试代码:

Task t = new Task();
TaskItem item = new TaskItem();
item.setTask(t);
t.addItem(item);
taskRepo.save(t);
  

测试代码运行良好,但我想知道如何获取已保存的项目,尤其是项目的生成id?看来我只能这样得到任务的身份。

我想编写一个函数来保存TaskItem并返回保存的实体,我已经考虑过用taskItemRepo直接保存它,但是当没有新创建通信任务时,例如:

Task t = taskRepo.findOne(tid);
TaskItem item = new TaskItem();
item.setTask(t);
taskItemRepo.save(item)

我会收到detached entity错误:(

0 个答案:

没有答案