Spring Data Rest 在 Java (repo.save()) 中保存具有关系(外键)的记录

Spring Data Rest save record with relation (foreign-key) in Java (repo.save())

我不知道如何将带有 link 的 SDR 记录保存到现有的 table。 例如:

有一个查找-table Flag 和另一个 table Account with name and n:1 与 Flag-ID 的关系。 Flag-table中的ID已经创建。

@Entity
public class Account{
    public Account(String name, Flag flag){
        this.name = name;
        this.flag = flag;
    }

    @Id
    private int id;

    @Column
    private String name;

    @ManyToOne
    private Flag flag;
    // Getter & Setter
}

@Entity
public class Flag{
    public Flag(String title){
        this.title = title;
    }

    @Id
    private int id;

    @Column
    private String title;
    // Getter & Setter
}

现在我想添加一个帐户并将其link添加到 flag-id,如下所示:

AccountRepo accountRepo;
accountRepo.save(new Account("Name", 0));

但是我在我的帐户函数中声明了一个对象,如果我想执行保存函数,我必须像这样添加一个标志对象:

accountRepo.save(new Account("Name", new Flag("title")));

但是在这种情况下,框架会添加一个新的Flag-record,这是我不想要的。我只想link它。

所以我需要帮助来解决我的问题。

谢谢!

编辑: @piotr-sołtysiak 和@upesh-m 的两个答案对我很有帮助。感谢您的帮助!

  1. 使用专用存储库查找所需的标志实体,例如

    Flag flag = flagRespository.findByTitle("title");
    
  2. 在账户实体中设置并保存:

    accountRepo.save(new Account("Name", flag));
    

您可以使用休眠的 'merge',即。 entityManager.merge(新帐户("Name",新标志("title")))。但是 Flag 的 Id 应该是一个现有的 Id ,所以它只是添加一个条目到 Account.

即。如果您已经在 db 中有一个 id = 1 的标志记录,并且您想要添加一个链接到这个标志的帐户,那么使用 entityManager.merge(new Account("Name", existingFlagObject)