结合OneToMany+FetchType.LAZY+LazyCollection+jackson数据类型hiberna



我想知道以下是否可能。

我有一些家长课。

@Entity
public class Parent {
private String name;
@LazyCollection(LazyCollectionOption.EXTRA)
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY)
@JsonManagedReference
private List<Child> children = new ArrayList<>();
}

很明显,我的孩子们也在上课。

@Entity
public class Child {
@ManyToOne(fetch = FetchType.LAZY)
@JsonBackReference
private Parent parent;
}

我使用https://github.com/FasterXML/jackson-datatype-hibernate以确保懒惰加载真的有效,并且jackson没有包括整个列表。我使用bean注册模块。

@Bean
public Hibernate5Module datatypeHibernateModule() {
return new Hibernate5Module();
}

一切如预期。目前我的JSON是这样的。

{
"name": "my name",
"children": null
}

在我的前端应用程序中,我想显示父namechildren的编号。是否可以在不使用自定义查询的情况下返回children的大小?

{
"name": "my name",
"children": 3141 <- include the size here
}

在后端,我可以很容易地使用parent.getChildren().size(),它会创建对数据库的额外请求。

select count() ...

我可以在前端应用程序中以某种方式访问这些信息吗?非常感谢!

您可以运行这个JPQL查询:

select p.name, count(c)
join Person p left join p.children c
group by p.name

最新更新