1

Date の BETWEEN 句で CriteriaQuery を使用するにはどうすればよいですか? これを試してみましたが成功しませんでした。

DAO メソッド:

public List<Registry> listRegistry(Date init){
    List<Registry> registrys = null;
    try{
        Date currentDate = new Date();
        CriteriaBuilder cb = getEm().getCriteriaBuilder();
        CriteriaQuery<Registry> c = cb.createQuery(Registry.class);
        Root<Registry> registry= c.from(Registry.class);

        // get error here; "The method get(String) in the type Path<Registry> is not applicable for the arguments (String, Date, Date)"
        c.select(registry).where(cb.between(registry.get("dateEntry", init, currentDate)));

        registrys = getEm().createQuery(c).getResultList();

    }
    catch (NoResultException x) {
        //does nothing
    }
    return registrys;
}

およびエンティティ クラス レジストリ:

@Entity
public class Registry {

@GenericGenerator(name="gen",strategy="increment")
@GeneratedValue(generator="gen")
@Column(name = "id", unique = true, nullable = false, precision = 15, scale = 0)
@Id
private int id;

private Date dateEntry;

// getters and setters .....
}

これらのエラー: 「型 Path のメソッド get(String) は、引数 (String、Date、Date) には適用できません」 ; どうすればこれを解決できますか?

4

1 に答える 1

4

コードを確認すると、タイプミスのようです。

あなたが持っている

// get error here; "The method get(String) in the type Path<Registry> is not applicable for the arguments (String, Date, Date)"
c.select(registry).where(cb.between(registry.get("dateEntry", init, currentDate)));

これはコンパイラ エラーです。引数を使用get(String)して型を呼び出そうとしていることを意味します。Path<Registry>(String, Date, Date)

CriteriaBuilder. between(Expression,Value,Value)のjavadocを見てください 。これは、 Path.get(String) ではなく3つの引数で呼び出す必要があるメソッドです。

このように見えるはずです。

 Path<Date> dateEntryPath = registry.get("dateEntry");
 Predicate predicate = cb.between(dateEntryPath,init,currentDate);
 c.select(registry).where(predicate);
于 2014-12-30T18:40:15.633 に答える