java - 与同一实体的一对多关系

标签 java jakarta-ee jpa jpa-2.0

请在下面找到实体代码,

@Entity
public class A implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    @OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.LAZY, mappedBy="parentActivity")        
    private Set<A> subActivities;

    @ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY)
    @JoinColumn(name = "PARENTACTIVITYID", insertable = true, updatable = true)
    private A parentActivity;

    // Getters, Setters, serialVersionUID, etc...
}   

如果我们想同时保留父项和子项,那么下面的代码工作得很好

public static void main(String[] args) {

    EntityManager em = ... // from EntityManagerFactory, injection, etc.

    em.getTransaction().begin();

    A parentActivuty   = new A();
    A subActivity1      = new A();
    A subActivity2 = new A();

    son.setParentActivity(parent);
    daughter.setParentActivity(parent);
    parent.setSubActivity(Arrays.asList(subActivity1, subActivity2));

    em.persist(parent);
    em.persist(son);
    em.persist(daughter);

    em.getTransaction().commit();
}

但是在这种情况下,我在数据库中有父对象并且想要保留子对象可能的解决方案是什么......?

最佳答案

您从数据库中获取父项,执行附件,并保留两个子项:

A parent = em.get(A.class, parentId);
A son = new A();
A daughter = new A();
son.setParentActivity(parent);
daughter.setParentActivity(parent);
em.persist(son);
em.persist(daughter);
parent.getSubActivities().add(son);
parent.getSubActivities().add(daughter);

关于java - 与同一实体的一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12419635/

相关文章:

java - Java 8 中如何处理货币?

java - Spring 异常转换不适用于 JPA

java - JPA 获取急于条件

java - 如何在 Struts 2 标签中使用 getParameter() ?

java - 理解 JPA、EJB3 和 Web 服务

java - 有哪些工具可以绘制项目架构?

java - 带有继承的 JPA ManyToOne 映射

java - 执行代理查找时出现重复 session 错误

java - Eclipse Java Enum 缩进超过左括号。如何让它看起来更正常?

java - 使用 intellij 和 payara 调试两个独立的 java 服务器应用程序