Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA:无限取子_Java_Json_Spring_Hibernate_Jpa - Fatal编程技术网

Java JPA:无限取子

Java JPA:无限取子,java,json,spring,hibernate,jpa,Java,Json,Spring,Hibernate,Jpa,我对两个实体之间的关系有问题,它们相互调用,我想我得到了一个不合适的获取: @Entity @Table(name = "domaine") @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class Domaine implements Serializable { private static final long serialVersionUID = 1L; @Id @Ge

我对两个实体之间的关系有问题,它们相互调用,我想我得到了一个不合适的获取:

@Entity
@Table(name = "domaine")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Domaine implements Serializable {

    private static final long serialVersionUID = 1L;

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

    @ManyToMany
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    @JoinTable(name = "lien_domaine_specialite",
        joinColumns = @JoinColumn(name="domaine_id", referencedColumnName="ID"),
        inverseJoinColumns = @JoinColumn(name="specialite_id", referencedColumnName="ID"))
    private Set<Specialite> specialites = new HashSet<>();


@Entity
@Table(name = "specialite")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Specialite implements Serializable {

    private static final long serialVersionUID = 1L;

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

    @ManyToMany(mappedBy = "specialites")
    @JsonIgnore
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    private Set<Domaine> domaines = new HashSet<>();

    @ManyToOne
    private Domaine domaine;
当我加载这样一个域实体时:

Select domaine from Domaine domaine left join fetch domaine.specialites where domaine.id = ?1

有没有办法告诉
Specialite
在我不需要加载时不要加载
Domaine

JPA很容易处理交叉引用。在当前JPA上下文期间加载的实体将不会再次加载。你面临的问题是什么?
我假设您在尝试将图形序列化为json时进入了无限循环。如果您不使用
@JsonManagedReference
@JsonBackReference
(特定于Jackson)

JPA可以轻松处理交叉引用,JSON处理库确实会进入无限循环。在当前JPA上下文期间加载的实体将不会再次加载。你面临的问题是什么?
我假设您在尝试将图形序列化为json时进入了无限循环。如果您不使用
@JsonManagedReference
@JsonBackReference
(特定于Jackson)

您可以使用
@Lazy
注释按需加载引用,但它与无限循环无关。您可以使用
@Lazy
注释按需加载引用,但它与无限循环无关。
Select domaine from Domaine domaine left join fetch domaine.specialites where domaine.id = ?1