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 的两个答案对我很有帮助。感谢您的帮助!
使用专用存储库查找所需的标志实体,例如
Flag flag = flagRespository.findByTitle("title");
在账户实体中设置并保存:
accountRepo.save(new Account("Name", flag));
您可以使用休眠的 'merge',即。 entityManager.merge(新帐户("Name",新标志("title")))。但是 Flag 的 Id 应该是一个现有的 Id ,所以它只是添加一个条目到 Account.
即。如果您已经在 db 中有一个 id = 1 的标志记录,并且您想要添加一个链接到这个标志的帐户,那么使用 entityManager.merge(new Account("Name", existingFlagObject)
我不知道如何将带有 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 的两个答案对我很有帮助。感谢您的帮助!
使用专用存储库查找所需的标志实体,例如
Flag flag = flagRespository.findByTitle("title");
在账户实体中设置并保存:
accountRepo.save(new Account("Name", flag));
您可以使用休眠的 'merge',即。 entityManager.merge(新帐户("Name",新标志("title")))。但是 Flag 的 Id 应该是一个现有的 Id ,所以它只是添加一个条目到 Account.
即。如果您已经在 db 中有一个 id = 1 的标志记录,并且您想要添加一个链接到这个标志的帐户,那么使用 entityManager.merge(new Account("Name", existingFlagObject)