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 に答える