簡體   English   中英

如何在 hibernate 中保存外鍵?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM