簡體   English   中英

如何在CriteriaQuery中使用jpa在模板中設置位置

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM