2016-12-07 3 views
0

Я не знаю, как сохранить запись в SDR со ссылкой на существующую таблицу. Например:Spring Data Rest сохранить запись с отношением (внешний ключ) в Java (repo.save())

Существует просмотрова стол Флаг и другую таблицу Счет с именем и п: 1 отношение к Flag-ID. ID в Флаг-table уже созданы.

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

Теперь я хочу, чтобы добавить учетную запись и связать его с флагом-ид, как это:

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

Но я объявил объект в моей учетной записи-функции и, если я хочу, чтобы выполнить сохранение -функции, я должен добавить флаг-объект, как это:

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

Однако в этом случае каркас будет добавлен новый флаг-запись, что я не хочу. Я только хочу связать это.

Так что мне нужна помощь в решении моей проблемы.

Спасибо!

Edit: Два ответы от @ Piotr-Sołtysiak и @ upesh-м помог и работал для меня. Спасибо за вашу помощь!

ответ

1

Вы можете использовать 'слияния' в спящий режим , т.е. entityManager.merge (новая учетная запись («Имя», новый флаг («название»))). Но идентификатор флага должен быть существующим идентификатором, так что он просто добавляет запись в учетную запись.

ie. Если у вас уже есть запись флага, существующая в db с id = 1, и вы хотите добавить учетную запись, связанную с этим флагом, используйте entityManager.merge (новая учетная запись («Имя», существующийFlagObject)

+0

Он тоже работает, спасибо! – Phil

1
  1. Найти нужный объект флаг, используя специальный репозиторий, например

    Flag flag = flagRespository.findByTitle("title"); 
    
  2. установить его в сущности учетной записи и сохранить:

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

Да, это работает, спасибо ! – Phil

 Смежные вопросы

  • Нет связанных вопросов^_^