【问题标题】:JPA : infinite fetch childrenJPA:无限获取孩子
【发布时间】:2020-06-15 08:20:16
【问题描述】:

我有两个实体关系的问题,他们互相调用,我想我得到了一个无限的获取:

@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;

当我添加这个关系ahd时出现问题:

@ManyToOne
private Domaine domaine;

当我像这样加载 Domaine 实体时:

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

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

【问题讨论】:

    标签: java json spring hibernate jpa


    【解决方案1】:

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

    【讨论】:

    • 可以使用@Lazy注解按需加载引用,但与无限循环无关。
    猜你喜欢
    • 2017-10-25
    • 1970-01-01
    • 2017-03-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 2018-08-10
    • 1970-01-01
    相关资源
    最近更新 更多