java - JPA:无限获取孩子
问题描述
我有两个实体关系的问题,它们互相调用,我想我得到了一个 inifite fetch :
@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
解决方案
JPA 可以轻松处理交叉引用。在当前 JPA 上下文期间加载的实体将不会再次加载。您面临的问题是什么?我想您在尝试将图形序列化为 json 时进入了无限循环。如果您不使用 @JsonManagedReference
and @JsonBackReference
(Jackson specific) ,JSON 处理库确实会进入无限循环
推荐阅读
- go - 在 Go 中使用位掩码(Go enumeration with iota)
- c# - 是否有一个输入传递给 n 个方法的设计模式,每个方法返回下一个方法的输入
- r - summary()与glance()之间的p值差异?
- c# - 调用在另一个线程上运行的方法
- jsp - 如何创建定义变量的迭代标记处理程序
- python - Return 语句打印第一次迭代,而 Print 输出所有迭代 - Python
- ssl - 对等连接中的 TLS
- python-3.x - Python If 语句未按预期工作
- python - Scrapy 与多个 Selenium 实例(并行)
- javascript - 未使用 AdvancedCustomFields 设置 Google Maps API 密钥