[英]How set where in templates using jpa in CriteriaQuery
我在Java EE的初学者,我需要知道,如何设置一个clausule 其中的标准验证码
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个表中重复,因此请注意,最好在该函数中重用代码。
谢谢
这是一个如何添加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>
,它对应于执行我们的条件的类型化查询的参数。
使用这种方法,您可以轻松地用新参数扩展通用方法。
希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.