我有@Entity Location
,其中有一个字段:
Set<Alert> openAlerts
然后我有一个@Entity Alert
,它有两个字段:
AlertState state
这是一个枚举(可以是OPEN
或CLOSED
)Location originatedIn
这是发出警报的位置。 目前Location
我有:
@OneToMany(mappedBy = "originatedIn")
@JsonIgnoreProperties({"originatedIn"})
private Set<Alert> openAlerts;
它检索链接到该位置的所有警报(打开或关闭)。
我想用Integer numberOpenAlerts
替换该字段。
此新字段应检索并统计与AlertState
OPEN
.xlsx
位置相关联的提醒。
我该怎么做?
答案 0 :(得分:1)
我可以想到一些可能性开始。
由于您使用的是Hibernate,因此可以使用@Where
上的openAlerts
注释来限制此设置为已打开的警报:
@OneToMany(mappedBy = "originatedIn")
@JsonIgnoreProperties({"originatedIn"})
@Where(clause="state='OPEN'")
private Set<Alert> openAlerts;
取决于state
列实际包含的与OPEN
枚举值相对应的内容。
有关指示,请参阅this question about @Where。
或者,您可以创建一个数据库视图,其中包含位置详细信息和打开警报的计数。然后,您将创建与该视图对应的另一个实体,称为LocationWithOpenAlertCount
。
最后,您可以为Location plus count创建一个DTO,并创建一个JPQL查询,该查询使用适当的位置字段和打开的Alert计数执行Constructor Select query。有关示例,请参阅this question and answer。