0

我是 java EE 的初学者,我需要知道如何此标准代码中设置分句

public <T> List<T> findEntity(Class<T> entityClass) {
    CriteriaQuery<T> criteria = builder.createQuery(entityClass);
    Root<T> entityRoot = criteria.from(entityClass);
    criteria.select(entityRoot);
    criteria.orderBy(order);
    return em.createQuery(criteria).getResultList();
}

他们会注意到我在 java ( <T>) 中使用模板来使此代码与我的数据库中的各种实体一起工作。

然后我传递 sql(在 postgresql 中)代码和实体类。

SQL:

CREATE TABLE activity
(
  id integer NOT NULL,
  name text NOT NULL,
  _modified timestamp without time zone,
  _user integer,
  _enable boolean,
)

和类实体

public class activity implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "activity_id_activity_seq" )
    @SequenceGenerator( name = "actividad_id_actividad_seq", sequenceName = "actividad_id_actividad_seq", allocationSize = 1, initialValue = 110 )
    @Column(name = "id")
    private Integer id;
    @Column(name = "name")
    private String name;
    @Column(name = "_modified")
    @Temporal(TemporalType.TIMESTAMP)
    private Date modified;
    @Column(name = "_enable")
    private Boolean enable;
    @Column(name = "_user")
    private Integer user;
    .......
}

我需要知道的是如何使用方法模板在函数findEntity的代码中添加 where 子句。

条件的 where 子句应该匹配列_Enable,这个列提到的这个列在我的数据库的 4 个表中重复,所以你注意到最好在那个函数中重用代码。

谢谢

4

1 回答 1

0

这是一个如何添加where()子句的示例:

public static <T> List<T> findEntity(Class<T> entityClass, boolean isEnabled) {
    CriteriaQuery<T> criteria = builder.createQuery(entityClass);
    Root<T> entityRoot = criteria.from(entityClass);
    criteria.select(entityRoot);

    criteria.where(builder.equal(
            entityRoot.get("enable"), //path expression
            builder.parameter(Boolean.class, "isEnabled")) //parameter expression
    );

    criteria.orderBy(order);
    return em.createQuery(criteria)
            .setParameter("isEnabled", isEnabled)
            .getResultList();
}

entityRoot.get("enable")语句定义Path<String>表达式。这相当于a.enable在 JPQL 中使用冒号表示参数,即

SELECT a FROM Activity a WHERE a.enable = :isEnabled

要构建条件表达式,还必须创建一个ParameterExpression<Boolean>对应于执行我们条件的类型化查询的参数。

使用这种方法,您可以轻松地使用新参数扩展您的泛型方法。

我希望它有所帮助。

于 2014-03-10T23:36:13.247 回答