мы разрабатываем приложение, в котором у нас есть древовидная структура. Использование 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;
Родительский узел «Узел» также имеет родителя, называемого Системой. Код похож на Узел и Данные. Есть 8 уровней, но все они похожи, используя отношение OneToMany для построения дерева.
Можно ли избежать сохранения объектов Data (Child) при сохранении Node (Parent). Или, например, я хочу сохранить объект с уровня 6 (системный узел), чтобы он не сохранялся и не объединял дочерние узлы.
Поскольку я получаю некоторые Узлы и Данные от Клиента за REST, и я хочу сохранить Узел немедленно, но объекты данных позже, используя поток, который проверяет, какие Данные являются новыми, и сохраняет только их.