如何从Panache实体查询指定字段(id、email)而非返回完整实体对象
解决方案
你可以通过以下3种常用方式实现指定字段查询,避免返回完整的MailingList实体:
- 方式1:直接查询指定字段,返回Object数组列表
直接在JPQL中指定你需要返回的两个字段,查询结果每个元素为对应字段值组成的数组:// 结果集中每个Object[]的第0位为id值,第1位为email值 List<Object[]> mailingListInfo = MailingList.list("select id, email from MailingList"); - 方式2:通过构造器投影返回自定义DTO(类型安全更易维护)
先定义一个只包含id和email的DTO类/Record:
然后使用JPQL的构造函数表达式查询,注意DTO要写全限定类名:// Java 16及以上版本可以直接用record,低版本用普通类加对应参数的构造方法即可 public record MailingListBaseInfo(Long id, String email) {}List<MailingListBaseInfo> result = MailingList.list( "select new com.yourpackage.MailingListBaseInfo(m.id, m.email) from MailingList m" ); - 方式3:使用Quarkus Panache原生投影接口(无需手写JPQL)
先定义投影接口,声明你需要获取的字段的getter方法:
直接调用Panache的public interface MailingListProjection { Long getId(); String getEmail(); }project方法做字段映射:List<MailingListProjection> result = MailingList.findAll() .project(MailingListProjection.class) .list();
内容的提问来源于stack exchange,提问作者Richard Matovu
相关产品推荐
相关产品推荐

