Java 坚持JPA收藏oneToMany不起作用
我有这个自我关系注释Java 坚持JPA收藏oneToMany不起作用,java,hibernate,jpa,Java,Hibernate,Jpa,我有这个自我关系注释 public class Estoria implements Serializable { @EmbeddedId protected EstoriaPK estoriaPK; @ManyToOne @JoinColumns({@JoinColumn(name = "id_estoria", referencedColumnName = "id", updatable = false, insertable = false, nullable = true)
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;
}
谁能给我一些建议吗
好消息,这篇文章解决了我的问题,但我并不认为我需要引用root>>leaf/leaf>>root您必须在子id中设置parrent id。在子任务集合中设置rootEstoria id
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);
}
@smartphonne,这是个好消息。若它有效,那个么你们可以接受答案并投票支持。让别人能找到答案是有用的!我忘了;现在做了吗
+----+------------+------------+--------------------------+----------- -------------------------------------------------------------------+------ ------+--------+--------------+
| 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 |
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);
}