通常存在显示所有类别以及这些类别的使用频率的业务问题。
这个问题很容易通过查询来回答:
SELECT c.*, count(*) FROM category_assignment ca LEFT JOIN category c on ca.c_id = c.id group by c.id
我要求的是您建议的基于以下内容映射结果集的方法:
@Entity
public class CategoryAssignment {
@Id
int id;
@ManyToOne(fetch = FetchType.EAGER)
private Category category;
@ManyToOne(fetch = FetchType.EAGER)
private Car car;
}
@Entity
public class Category {
@Id
String id;
TypeEnum type;
...
}
@Entity
public class Car {
@Id
int id;
String name;
...
}
从我的角度来看,映射的最佳结果是获取一个自定义对象,其中包含作为实体的类别和作为存储库调用之外的附加变量的计数:
MappingResult result = repository.getCategoriesAndTheirCountOfType(TypeEnum type);
public class MappingResult {
Category category;
BigInteger count;
}
到目前为止,我能够实现这一目标的唯一方法是手动映射结果集。但我希望有更简单的方法来绘制它。
您可以使用预测为拿到它,为实现它:
public interface CategoryAndCount {
Category getCategory();
Long getUsageCount();
}
public interface CategoryAssignmentRepository extends CrudRepository<CategoryAssignment, Integer> {
@Query("select c as category, count(*) as usageCount from CategoryAssignment ca join ca.category c where c.type = ?1 group by c")
CategoryAndCount getCategoriesAndTheirCountOfType(TypeEnum type);
}
不要忘记向查询中的字段添加别名(c ascategory, 计数(*)为使用次数).
更多信息
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)