Я пытаюсь получить один столбец из таблицы, но получаю ошибку компиляции о типе возвращаемого значения.
SQL
select oComment from comment where oNote = note and version > 0;
У меня есть Comment
стол и Note
стол.Таблица комментариев содержит comment, note and version
столбцов.Сам комментарий является примечанием.Теперь я хочу получить все комментарии к заметке, версия которой больше 0. Но здесь я хочу получить только столбец комментариев с типом заметки.
Comment.java
@Entity
@Table(name="comment")
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE, region="comments")
public class Comment implements Serializable {
private static final long serialVersionUID = -4420192568334549165L;
public Comment() {
}
@Id
@OneToOne
@JoinColumn(name="commentuuid",referencedColumnName="noteuuid")
private Note oComment;
@Id
@OneToOne
@JoinColumn(name="noteuuid",referencedColumnName="noteuuid")
private Note oNote;
}
Note.java
@Entity
@Table(name = "note")
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE, region="notes")
public class Note implements Serializable{
private static final long serialVersionUID = 4089174391962234433L;
@Column(name="title")
private String m_szTitle;
@Column(name="htmlcontent")
private String m_sbHtmlContent;
@Column(name="textcontent")
private String m_sbTextContent;
@Id
@Column(name="noteuuid", columnDefinition="varchar(36)")
private String noteUuid;
}
CustomRepositoryMethod
public List<Note> findAllByNote(Note oNote, int iOffset, int iResultSize) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Comment> cq = cb.createQuery(Comment.class);
Root<Comment> oComment = cq.from(Comment.class);
List<Predicate> predicates = new ArrayList<>();
predicates.add(cb.equal(oComment.get("oNote"), oNote));
predicates.add(cb.greaterThan(oComment.get("version"), 0));
Subquery<Note> subquery = cq.subquery(Note.class);
Root<Note> note = subquery.from(Note.class);
cb.desc(note.get("m_dtCreationDate"));
cq.where(predicates.toArray(new Predicate[0]));
cq.multiselect(oComment.<Note>get("oComment"));
return (List<Note>)em.createQuery(cq).setFirstResult(iOffset).setMaxResults(iResultSize).getResultList();
}
error Ошибка в операторе возврата,
Cannot cast from List<Comment> to List<Note>