2015-04-07 4 views
0

Я разрабатываю логику на стороне сервера моего проекта, которая будет обновлять Entity в базе данных. Но этот объект имеет ссылку на список другого объекта.Обновление базы данных при удалении некоторых записей JPA

Так, например, у меня есть сущность Test как этот:

@Entity 
    public class Test { 

     @Id 
     @Column(name = "idTest", nullable = false) 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     private Long id; 
     private String name; 

     @OneToMany(mappedBy = "idTest", targetEntity = Test2.class, fetch = FetchType.LAZY) 
     private Collection<Test2> test2Collection; 
    } 

, который имеет ссылки на Test2 Entity.

@Entity 
public class Test2 { 

    @Id 
    @Column(name = "idTest2", nullable = false) 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String field1; 
    private String field2; 

    @ManyToOne 
    @JoinColumn(name = "idTest", referencedColumnName = "idTest") 
    private Test idTest; 
} 

В моем случае, я обновляя коллекции test2Collection из Test записи и в конце концов я извлекая некоторые из Test2 записей о нем.

Простой метод merge от EntityManager не обнаруживает, что некоторые записи были удалены, когда я вызываю это, передавая новую обновленную запись Test.

Я думал отслеживать удаленные записи от test2Collection, сделав разницу между записью Test перед обновлением базы данных новой записью Test, подлежащей обновлению.

Но я не уверен, что это единственный (и лучший) способ сделать это. У кого-то еще есть другая идея?

+0

Вам не нужно, например, «cascade = CascadeType.ALL» на OneToMany? –

ответ

2

В ваших отношениях вам нужно добавить orphanRemoval, а затем, если вы удалите один элемент коллекции и сохраните Test, элемент, удаленный в коллекции, автоматически удалит таблицу Test2.

@OneToMany(orphanRemoval = true, mappedBy = "idTest", targetEntity = Test2.class, fetch = FetchType.LAZY) 
    private Collection<Test2> test2Collection; 
+0

Спасибо! Этот подход намного лучше, чем тот, который я думал! –

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