hibernate - 在Hibernate中使用Where子句并选择几列

标签 hibernate hibernate-mapping hibernate-criteria

我想使用最新的 Hibernate 来使用代码来选择列

public TerminalsModel getTerminalToken(String terminalToken) throws Exception {
        TerminalsModel terminal = null;
        try {
            session.getTransaction().begin();
            terminal = (TerminalsModel) session.get(TerminalsModel.class, terminalToken);
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
            throw new Exception("Error");
        }
        return terminal;
    }

我想使用此代码仅选择几列:

Criteria cr = session.createCriteria(User.class)
    .setProjection(Projections.projectionList()
      .add(Projections.property("id"), "id")
      .add(Projections.property("Name"), "Name"))
    .setResultTransformer(Transformers.aliasToBean(User.class));

但我发现 createCriteria 已被弃用。我应该使用什么 Java 方法?

有没有一种方法可以在不使用自定义 SQL 语句的情况下使用 WHERE 实现 SQL 查询,并且只得到一列结果?我想把一切都交给Java代码来管理。

最佳答案

在 JPA 查询中仅返回一列相当简单:

public List<Integer> getUserIdsByName(String name) {

    CriteriaBuilder builder = session.getCriteriaBuilder();
    CriteriaQuery<Integer> query = builder.createQuery( Integer.class );

    Root<User> root = query.from( User.class );
    query.select( root.get( "id" ) );
    query.where( builder.equal( root.get( "name" ) , name ) );

    return session.createQuery( query ).getResultList();
}

我不知道您的示例中的 ResultTransformer 的等效项,但您可以选择多个属性。这可能是返回一个简单的值数组,或者在本例中使用返回类型的构造函数参数:

public List<UserIdAndName> getUserIdAndNameByName(String name) {

    CriteriaBuilder builder = session.getCriteriaBuilder();
    CriteriaQuery<UserIdAndName> query = builder.createQuery( UserIdAndName.class );

    Root<User> root = query.from( User.class );
    query.where( builder.equal( root.get( "name" ) , "9" ) );
    query.select( builder.construct( UserIdAndName.class , root.get( "tariff" ).get( "id" ) , root.get( "name" ) ) );

    return session.createQuery( query ).getResultList();
}

关于hibernate - 在Hibernate中使用Where子句并选择几列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51167957/

相关文章:

java - JPA createStoredProcedureQuery 在使用 Hibernate 时抛出 "ORA-01000: maximum open cursors exceeded"

Hibernate(带有注释)——如何开始

mysql - 我可以将 @Where 注释与 @ManytoOne 关联一起使用吗?

java - 如何避免将已删除的实例传递到与 Set 的一对多关系上的合并?

java - 如何在不使用 @JsonIgnore 的情况下解决 (com.fasterxml.jackson.databind) 异常

java - hibernate - 无法执行查询

java - 如何为这个 sql 查询编写 Hibernate Criteria?

java - hibernate :无法从数据库获取建议的身份策略列表。可能是 JDBC 驱动程序问题

java - 如何在没有类的情况下使用 Hibernate 复合标识?

Spring JPA ExampleMatcher比较日期条件