java - 实体列表上的 Hibernate 过滤器,但只检索其中一个属性

标签 java hibernate jpa

如果我有一个名为 Foo 的实体,看起来有点像这样:

@Entity
public final class Foo {
    private int id;
    private String name;
    ...
}

我想检索 ID 大于 10 的 Foo 对象的名称。如果我已经有了 Foo 对象的集合,我可以这样做:

List<Foo> foos = ...
Query filter = session.createFilter(foos, "where id > :id");
filter.setInteger("id", 10);
List filteredFoos = filter.list();

有没有一种方法可以创建上述过滤器,以便我检索字符串列表(即 Foo 名称)而不是我必须像这样手动过滤掉的 Foos 列表:

for (Foo foo : filteredFoos) {
    String name = foo.getName();
    ...
}

最佳答案

List filteredFoos = session.createFilter(foos, "where id > :id")
                           .setInteger("id", 10).list();
List filteredFooNames = session.createFilter(filteredFoos, "select name").list();

或者试试这个。我不确定这是否有效,但前者肯定有效。

List filteredFooNames = session.createFilter(foos, "select name where id > :id")
                           .setInteger("id", 10).list();

关于java - 实体列表上的 Hibernate 过滤器,但只检索其中一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3983795/

相关文章:

java - 如果我在执行同步函数时关闭一个java程序,它会完成吗

java - Hibernate 事务计数器行为

java - Java Spring 中使用 @OneToMany 关系发生奇怪的开始

java - Spring 数据JPA : How to join two entities using annotations

java - em.find 和 em.createQuery 有什么区别

java - Spring Data Rest PagingAndSortingRepository AbstractMethodError (RepositoryFactorySupport)

java - 如何有效地小写集合的每个元素?

java - 如何在没有 Java Web Start 的情况下将 Java 控制台输出通过管道传输到文件?

java - ActiveMQ 通过 REST 处理消息

java - 如果不在事务中,Hibernate session.update 不工作