java - 我的JPA查询方法是否正确?

标签 java jpa

我在 Web 应用程序中使用 JPA,当我不希望数据库返回所有对象时,我会执行以下操作:

    Query query = super.entityManager.createQuery("select b.id, b.buyName from Buy b where b.id in (:list)");
    query.setParameter("list", buyIds);

    List<Object[]> result = query.getResultList();
    List<Buy> retval = new ArrayList<Buy>();

    for (Object[] item : result) {
        Buy buy = new Buy();
        buy.setId((Long)item[0]);
        buy.setBuyName((String)item[1]);
        retval.add(buy);
    }

    return retval;

也就是说,查询我想要的字段,然后手动创建所需对象的列表并填充它。 这是一个好的做法吗?感觉有更好的方法可以做到这一点。

谢谢。

最佳答案

可以直接从查询中返回一个新对象,其中仅包含您需要的信息。例如,您的查询将如下所示:

select new BuyDTO(b.id, b.buyName) from Buy b where b.id in (:list) 

数据传输对象将仅包含所需的字段:

public class BuyDTO {

    private Long id;
    private String buyName;

    public BuyVO(Long id, String name) {
        this.id = id;
        this.buyName = name;
    }

    // getters and setters

}

运行查询时,它将返回 List<BuyDTO>

关于java - 我的JPA查询方法是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7703386/

相关文章:

java - 使输入参数成为强制 JAX-WS

java - 我是否总是需要在保存 Hibernate 主对象时显式设置子对象

java - 本指南中的 JPA 实现是什么?

java - 列表结果映射 Spring JPA

java - 在违反唯一约束时使用 JPA/Hibernate 和实体更新列

java - 调用两次dispatchKeyEvent()

java - MIDI 乐器不适用于 javax.sound.midi.MidiChannel

java - .jar 文件无法运行? (我觉得我错过了一些明显的东西,在来这里之前自己寻找解决方案。)

java - 在构建Java RESTful Service时,什么有更大的优势——先为它们创建POJO还是XML文档?

postgresql - 如何检索记录但仅当每个链接的子实体列 'archived' 都设置为 true 时?