Как использовать репозиторий JPA с рекурсивной сущностью в Java - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь создать измерение моего ObjectX, которое в свою очередь может содержать список

Так вот мой ObjectX:

@Table(name = "object_x")
@Entity
@Data
@Builder(toBuilder=true)
@AllArgsConstructor(access = AccessLevel.PACKAGE)
@NoArgsConstructor(access = AccessLevel.PACKAGE)
public class ObjectX implements Serializable {
    private static final long serialVersionUID = -28398L;

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

    @ManyToOne
    @JoinColumn(name="parent_id")
    private ObjectX parent;

    @OneToMany(mappedBy = "parent",fetch = FetchType.LAZY) 
    private Set<ObjectX> childrens; 

    @Column(name = "label", nullable = false, insertable = true, updatable = false, length = 40)
    private String label;

}

Вот мой репозиторий JPA:

public interface ObjectXDao extends JpaRepository<ObjectXEntity, Long>, JpaSpecificationExecutor<ObjectXEntity> {
    @Query("SELECT x FROM ObjectXEntity p WHERE p.parent = null")
    List<ObjectXEntity> findObjectXHierarchy();
}

Тестовый пример: test-case-image

Результат:

Я получаю объекты, которые имеют null какparent_id, но в списке их детей null , и у меня в отладке:

com.sun.jdi.InvocationException произошел вызов метода.

Iя уже пытался инициализировать Set: private Set childrens = new HashSet ();

Я также пытался изменить его для типа List.

Здесь аналогичные проблемы, но это не то же самое: JPA: Как иметь отношение «один ко многим» одного и того же типа сущности

Спасибо!

...