JPA OneToMany Каскад - PullRequest
       10

JPA OneToMany Каскад

0 голосов
/ 06 ноября 2018

мы разрабатываем приложение, в котором у нас есть древовидная структура. Использование 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, и я хочу сохранить Узел немедленно, но объекты данных позже, используя поток, который проверяет, какие Данные являются новыми, и сохраняет только их.

...