2010-09-09 50 views
0

我试图使用连接表来完成即席查询,使用Restrictions.or和Restrictions.ilikeHibernate的标准,连接还是

我的实体样子:

@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:无法解析属性:CaseReview:中reviewCasestudentInformation。我也尝试创建多层别名:

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

并在restriction.or中使用它并获得相同的结果。奇怪的是,任何一套别名都可以正常工作。

Order.asc("reviewCaseStudentInformation.lastName") 

茫然无措。建议?

回答

0

您需要创建另一个标准 - 即一个子标准 - 这样的:

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

PS。我认为它不能帮助ReviewCaseCaseReview上的字段......它使代码相当混乱!