我想知道以下是否可能。
我有一些家长课。
@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
}
在我的前端应用程序中,我想显示父name
和children
的编号。是否可以在不使用自定义查询的情况下返回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