personId 및 questionId 문자열 ids가 각각있는 Person 엔티티 및 Question 엔티티가있는 복합 ID AnswerId가있는 엔티티 응답이 있습니다. 또한 Question 엔터티에는 questionText 필드가 있습니다.HIbernate Criteria 앨리어싱 결합하지 않음
Criteria criteria = session.createCriteria(AnswerEntity.class);
criteria.add(Restrictions.eq("answerId.person.personId", personId));
criteria.add(Restrictions.eq("answerId.question.questionId", questionId));
그것은 그것이 제공 personId 및 questionId을 기준으로 결과를 필터링 점에서 작동 : 내가 좋아하는 뭔가를하려고하면
.
그러나, 나는 시도하는 경우 :
Criteria criteria = session.createCriteria(AnswerEntity.class);
criteria.add(Restrictions.eq("answerId.person.personId", personId));
criteria.add(Restrictions.like("answerId.question.questionText",questionText));
실패합니다. 내가 questionText에 액세스 할 수 있도록
SELECT this_.PERSON_ID AS PERSON6_5_0_,
this_.QUESTION_ID AS QUESTION5_5_0_,
this_.THEIR_ANSWER AS THEIR3_5_0_,
FROM ANSWER this_
WHERE q1_.QUESTION_TEXT LIKE ?
AND this_.PERSON_ID=?
가 어떻게 A는 대답과 질문 사이에 가입 않습니다 : 그것은 왜 questionText 및 생성 된 SQL을 보여줍니다 찾을 수 없다고? 나는
criteria.createAlias("answerId.question", "q");
criteria.add(Restrictions.like("q.questionText", "%" + text + "%"));
같은 별명을 추가하는 시도했지만 그 작동하지 않습니다. 누구든지 내가 뭘 잘못하고 있는지에 관해 도움을 줄 수 있습니까?
편집 : 이상한 점은 Person 엔티티에도 Answers 세트가 있기 때문에 "answers.answerId.question.questionText"
과 같은 제한을 사용하여 Person 및 필터에 대한 쿼리를 수행 할 수 있으며 실제로 작동합니다. 나는 무엇이 다른지 잘 모르겠습니다.
편집 : 내 엔티티 (게터/세터없이/동일/등)
@Entity
@Table(name = "ANSWER")
public class AnswerEntity implements Serializable
{
private static final long serialVersionUID = -8254277382097937813L;
@EmbeddedId
private AnswerId answerId;
@Column(name = "THEIR_ANSWER")
private int theirAnswer;
}
@Embeddable
public class AnswerId implements Serializable
{
private static final long serialVersionUID = 7025913625856563058L;
@OneToOne
@Index(name = "ANSWER_QUESTION_ID_INDEX")
@JoinColumn(name = "QUESTION_ID")
@ForeignKey(name = "FKA1_QUESTION_ID")
private QuestionEntity question;
@ManyToOne
@Cascade(CascadeType.ALL)
@Index(name = "ANSWER_PERSON_ID_INDEX")
@JoinColumn(name = "PERSON_ID")
@ForeignKey(name = "FKA2_PERSON_ID")
private PersonEntity person;
}
@Entity
@Table(name = "QUESTION")
public class QuestionEntity implements Serializable
{
private static final long serialVersionUID = -3083000088157555984L;
@Id
@Column(name = "QUESTION_ID", nullable = false)
private String questionId;
@Index(name = "QUESTION_TEXT_INDEX")
@Column(name = "QUESTION_TEXT", length = 4000, nullable = false)
private String questionText;
}
도메인 클래스 정의를 게시 할 수 있습니까? –
@MikeSickler가 추가되었습니다. – AHungerArtist
PersonEntity는 그 제약없이 실패 할 수 있으므로 제거 할 수 있습니다. – AHungerArtist