2016-01-27 2 views
0

У меня есть 2 класса с односторонней односторонней связью OneToMany.JPA/Hibernate fetch

class A { 
    @Column(name = "a_id") 
    Integer id; 
    @OneToMany 
    @JoinColumn(name = "a_id") 
    private List<B> listOfB; 
    //getters and setters 
} 

class B { 
    Integer id; 
    String name; 
    @Column("a_id") 
    Integer aId; 
    //getters and setters 
} 

В базе данных я уже сэкономили экземпляр B. мне нужно сделать:

a.listOfB.add(b); 
save(a); 

В объекте b в базе данных у меня есть идентификатор и имя, но Ф.К. равно нулю. Мне нужно обновить fk, но перед этим мне нужно получить объект b; Как я могу это сделать?

Только путем написания пользовательского метода или Hibernate/JPA есть собственный метод для извлечения объектов?

+0

* В базе данных я уже сэкономили экземпляр B * - не соответствует действительности. –

ответ

1

Ваше картографирование не очень распространено. Обычный способ иметь @JoinColumn в B и mappedBy = "a" в A. И вы можете указать cascade. В простейшем случае cascade = CascadeType.ALL.

class A { 
     @Column(name = "a_id") 
     Integer id; 

     @OneToMany(mappedBy = "a", cascade = CascadeType.ALL) 
     private List<B> listOfB = new ArrayList<B>; 

     public void addB(B b) { 
      b.setA(this); 
      listOfB.add(b); 
     } 
    } 

    class B { 
     Integer id; 
     String name; 

     @ManyToOne(fetch = FetchType.LAZY) 
     @JoinColumn(name = "a_id") 
     private A a; 
    } 

Чтобы решить ваш вопрос

save(a); 
b.setA(a); 
saveOrUpdate(b); 

И cascade поможет вам сделать то же самое, почти пути с помощью addB() метода

a.addB(b); 
save(a);