4 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊
在CustomRepositoryMethod中將第一行替換CriteriaQuery<Comment> cq = cb.createQuery(Comment.class);為CriteriaQuery<Note> cq = cb.createQuery(Note.class)
cb.createQuery參數(shù)在您可以看到的文檔中接受結(jié)果類。
更新
// assuming query like
// select oComment from comment inner join Note on comment.noteuuid=Note.noteuuid where Note.noteUuid = 1 and version > 0;
CriteriaBuilder cb = em.getCriteriaBuilder();
// data type of oComment
CriteriaQuery<Note> query = cb.createQuery(Note.class);
// from comment
Root<Comment> comment = query.from(Comment.class);
//join
Join<Comment, Note> note = comment.join(comment.get("oNote"));
//version Condition
Predicate version=cb.greaterThan(comment.get("version"),0 );
//Note condition
predicate note=cb.equal(note.get("noteuuid"),note.getNoteUuid());
// get oComment and where condtion
query.select(comment.get("oComment")).where(cb.and(version,note));
return em.createQuery(query).setFirstResult(iOffset).setMaxResults(iResultSize).getResultList();

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
您的條件查詢的根Comment不是Note
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Comment> cq = cb.createQuery(Comment.class);
Root<Comment> oComment = cq.from(Comment.class);
你正在嘗試做
return (List<Note>)em.createQuery(cq).setFirstResult(iOffset)
.setMaxResults(iResultSize).getResultList();
在這種情況下編譯錯(cuò)誤是不可避免的,因?yàn)椴粫?huì)em.createQuery(cq).getResultList()返回List<Comment>List<Note>

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊
沒(méi)有必要編寫(xiě)自定義存儲(chǔ)庫(kù)方法,因?yàn)槟趧?chuàng)建的存儲(chǔ)庫(kù)方法已經(jīng)在 spring-data 中生成。
如果您的存儲(chǔ)庫(kù)擴(kuò)展了 CrudRepository,您將免費(fèi)獲得您正在尋找的方法。
模式是 findAllBy[propertyOfClass]。
但請(qǐng)注意,您的實(shí)體中實(shí)際上沒(méi)有 Collection of NOTE。
也許您應(yīng)該首先將 OneToOne 關(guān)聯(lián)更改為 OneToMany。

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
可以構(gòu)建為條件查詢,如下所示:
CriteriaQuery<Country> q = cb.createQuery(Country.class);
Root<Country> c = q.from(Country.class);
q.select(c.get("currency")).distinct(true);
該select方法采用一個(gè) Selection 類型的參數(shù)并將其設(shè)置為 SELECT 子句內(nèi)容。
添加回答
舉報(bào)