我们正在开发一个具有树状结构的应用程序。使用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对象成为了对象。