簡體   English   中英

將子實體添加到現有的父級休眠 onetomany

[英]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);
}

您的createTaskcopyTask方法應更改為:

@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.

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