Критерии гибернации, присоединения или - PullRequest
0 голосов
/ 10 сентября 2010

Я пытаюсь выполнить специальные запросы, используя объединенные таблицы, используя Restrictions.or и Restrictions.ilike

Мои сущности выглядят так:

@Entity
@Table(name="CASE_REVIEW")
public class CaseReview {

    @Id
    @Column(name = "REVIEW_ID", unique = true, nullable = false, length = 19)
    private Long reviewId;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "CASE_ID", nullable = false)
    private Case reviewCase;

 }

 @Entity
 @Table(name = "CASE")
 public class Case {

    @Id
    @Column(name = "ID", unique = true, nullable = false, length = 19)
    private Long id;

    @OneToOne( fetch=FetchType.EAGER )
    @JoinColumn( name="STUDENT_ID" , referencedColumnName="ID", 
    private StudentInformation studentInformation;

 }

 @Entity
 @Table( name="STUDENT")
 public class StudentInformation {
    @Id
    @Column( name="ID")
    private Long id;

    @Column( name="LAST_NAME")
    private String lastName;

    @Column( name="FIRST_NAME")
    private String firstName;
 }

Мой код выполняет что-то вроде следующего:

Criteria c = session.createCriteria( CaseReview.class );
c.createAlias( "reviewCase" , "reviewCase"); 
c.createAlias( "reviewCase.studentInformation" , "reviewCasestudentInformation");
c.add( Restrictions.or( Restrictions.ilike("reviewCasestudentInformation.lastName" , "%e%" ), Restrictions.ilike( "reviewCasestudentInformation.firstName" , "%e" )));

Я получаю org.hibernate.QueryException: не удалось разрешить свойство: reviewCasestudentInformation of: CaseReview. Я также пытался создать многоуровневые псевдонимы:

c.createAlias( "reviewCase.studentInformation" , "reviewCaseStudentInformation");

и использовать его в файле resttion.or с теми же результатами. Как ни странно, любой набор псевдонимов прекрасно работает для

Order.asc( "reviewCaseStudentInformation.lastName")

Практически в растерянности. Предложения?

1 Ответ

0 голосов
/ 11 сентября 2010

Вам необходимо создать другой критерий - то есть подкритерий - как это:

Criteria criteraCaseReview = session.createCriteria(CaseReview.class);
Criteria criteraReviewCase = criteraCaseReview.createCriteria("reviewCase");
criteraReviewCase.add(Restrictions.or(Restrictions.ilike("lastName", "%e%"), Restrictions.ilike( "firstName", "%e")));

PS.Я считаю, что не помогает, что ReviewCase - это поле в CaseReview ... это делает код довольно запутанным!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...