[英]How to save a foreign key in hibernate?
我有一個包含任務列表的時間表實體。 當我嘗試將新任務添加到時間表時,除外鍵外,所有內容都會保存。 任何想法我應該如何避免使用自定義 SQL 查詢並以 hibernate 方式完成工作?
我的時間表實體:
@Entity
@Table(name = "timesheet")
public class Timesheet {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private LocalDate date;
@OneToMany(
mappedBy = "timesheet",
cascade = CascadeType.ALL,
orphanRemoval = true,
fetch = FetchType.EAGER
)
@JsonManagedReference
private List<Task> tasks = new ArrayList<>();
我的任務:
@Entity
@Table(name = "task")
public class Task {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String title;
private Integer hours;
@ManyToOne
@JsonBackReference
private Timesheet timesheet;
服務內涵:
@Override
public void addTask(int timesheetId, TaskVO taskVO) {
Timesheet oldTimesheet = timesheetRepository.findById(timesheetId).orElse(new Timesheet(date, tasks));
Task task = taskMapper.transformToEntity(taskVO);
taskRepository.save(task);
oldTimesheet.getTasks().add(task);
timesheetRepository.save(oldTimesheet);
}
從Task
object 到其所有者Timesheet
缺少一個鏈接。 填充這個關系應該持久化Task
表中的外鍵列,否則JPA持久化器仍然會在Task
object中查看timesheet
字段為null:
@Override
public void addTask(int timesheetId, TaskVO taskVO) {
Timesheet oldTimesheet = timesheetRepository.findById(timesheetId).orElse(new Timesheet(date, tasks));
Task task = taskMapper.transformToEntity(taskVO);
task.setTimesheet(oldTimesheet); // need this
taskRepository.save(task);
oldTimesheet.getTasks().add(task);
timesheetRepository.save(oldTimesheet);
}
注意:我不確定這一點,但您可能不需要保存任務,如果您在最后保存時間表,因為您在tasks
字段上有CascadeType.ALL
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.