2015-01-29 3 views
0

Я эта selfRelationship аннотацииУпорство JPA коллекция oneToMany не работает

public class Estoria implements Serializable { 

@EmbeddedId 
protected EstoriaPK estoriaPK; 

@ManyToOne 
@JoinColumns({@JoinColumn(name = "id_estoria", referencedColumnName = "id", updatable = false, insertable = false, nullable = true) 
      ,@JoinColumn(name = "id_projeto" , referencedColumnName = "id_projeto" ,  insertable = false, updatable = false)}) 
private Estoria subtask; 

@OneToMany(mappedBy = "subtask",cascade = CascadeType.ALL) 
private Collection<Estoria> subtasks; 

} 

и я стараюсь упорствовать эту коллекцию ::

public void persistSubtasks(int idEstoria, Collection<Estoria> subtasks) { 
    Estoria rootEstoria = entityManager.createNamedQuery("Estoria.findById", Estoria.class) 
        .setParameter("id", idEstoria) 
        .getSingleResult(); 

     rootEstoria.setSubtasks(subtasks); 
} 

Но сохранение базы данных сохраняются корневая вратаря реф.номера:

+----+------------+------------+--------------------------+-----------  -------------------------------------------------------------------+------ ------+--------+--------------+ 
| id | id_projeto | id_estoria | nome      | descricao                  | estimativa | status | data_criacao | 
+----+------------+------------+--------------------------+------------------------------------------------------------------------------+------------+--------+--------------+ 
| 1 |   7 |  NULL | Check all old activities | No one know if every feature was checked before builded      |  NULL |  0 | 2015-01-02 | 
| 2 |   7 |  "supost to be 1" | Register all users  | Everyone needs to be registered and identified by profile     |  NULL |  0 | 2015-01-02 | 

Может ли кто-нибудь дать мне какое-нибудь объявление?

Хорошие новости это сообщение>Understanding annotations and JPA(hibernate) решить мою проблему, но я действительно не хотя о том, что мне нужно ссылаться на ОБА корень >> лист/лист >> Root

ответ

0

Вы должны установить parrent идентификатор в детской идентификаторами. Установите идентификатор rootEstoria в коллекции подзадач.

public void persistSubtasks(int idEstoria, Collection<Estoria> subtasks) { 
    Estoria rootEstoria = entityManager.createNamedQuery("Estoria.findById", Estoria.class) 
       .setParameter("id", idEstoria) 
       .getSingleResult(); 
    for(Estoria subtask:subtasks){ 
     subtask.setSubtask(rootEstoria); 
    } 
    rootEstoria.setSubtasks(subtasks); 
} 
+0

Да, это то, что я сделал, thx! – davidwillianx

+0

@smartphonne. Это хорошая новость. Если он работает, вы можете принять ответ и проголосовать. Чтобы другие могли найти ответ полезным – Ramesh

+0

Ницца! я забыл; сделал это сейчас – davidwillianx

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