4 回答
TA贡献1851条经验 获得超5个赞
在CustomRepositoryMethod中将第一行替换CriteriaQuery<Comment> cq = cb.createQuery(Comment.class);为CriteriaQuery<Note> cq = cb.createQuery(Note.class)
cb.createQuery参数在您可以看到的文档中接受结果类。
更新
// 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贡献1829条经验 获得超7个赞
您的条件查询的根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();
在这种情况下编译错误是不可避免的,因为不会em.createQuery(cq).getResultList()返回List<Comment>List<Note>
TA贡献1836条经验 获得超4个赞
没有必要编写自定义存储库方法,因为您正在创建的存储库方法已经在 spring-data 中生成。
如果您的存储库扩展了 CrudRepository,您将免费获得您正在寻找的方法。
模式是 findAllBy[propertyOfClass]。
但请注意,您的实体中实际上没有 Collection of NOTE。
也许您应该首先将 OneToOne 关联更改为 OneToMany。
TA贡献1796条经验 获得超4个赞
可以构建为条件查询,如下所示:
CriteriaQuery<Country> q = cb.createQuery(Country.class);
Root<Country> c = q.from(Country.class);
q.select(c.get("currency")).distinct(true);
该select方法采用一个 Selection 类型的参数并将其设置为 SELECT 子句内容。
添加回答
举报