[英]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.