JPA一对多级联

时间:2018-11-06 13:07:29

标签: java mysql hibernate jpa eclipselink

我们正在开发一个具有树状结构的应用程序。使用Java EE和JPA(EclipseLink)和MySQL。

我的问题: 保存父母会保存所有孩子。 我删除了CascadeType PERSIST和MERGE,但仍然会级联。

示例代码: 父节点:

@Entity
@Table(name = "node")
@NamedQuery(name = "node.findAll", query = "SELECT n FROM Node n")
public class Node implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    @Column(name = "NAME", nullable = false, unique = true)
    private String name;


    @OneToMany(fetch = FetchType.LAZY)
    @MapKey(name = "name")
    @MapKeyColumn(name = "name")
    @MapKeyJoinColumn(name = "name")
    @JoinColumn(name = "NODE_ID", referencedColumnName = "id")
    private Map<String, Data> datas = new HashMap<String, Data>();

以及子节点:

@Entity
@Table(name = "data")
@NamedQuery(name = "data.findAll", query = "SELECT d FROM Data d")
@IdClass(DataId.class)
public class Data implements Serializable {

    private static final long serialVersionUID = 1L;

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

    @Id
    @Column(name = "NAME", nullable = false)
    private String name;

父节点“节点”也有一个称为System的父节点。该代码类似于节点和数据。使用OneToMany关系构建树有8个级别,但所有级别都是相似的。 在保存节点(父级)时是否可以避免保存数据(子级)对象。或者例如,我想保存一个级别6(系统节点)中的对象,这样它就不应持久化或合并子节点。

因为每个REST都会从客户端接收一些节点和数据,因此我想立即保存该节点,但是以后使用线程检查Data数据是新数据并仅保存它们,因此Data对象成为了对象。

0 个答案:

没有答案