【问题标题】:Hibernate Criteria, Joins, OrHibernate 标准、连接或
【发布时间】:2010-09-09 21:49:50
【问题描述】:

我正在尝试使用连接表完成即席查询,使用 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: could not resolve property: reviewCasestudentInformation of: CaseReview。我也尝试过创建多层别名:

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

并在限制中使用它。或具有相同的结果。奇怪的是,任何一组别名都适用于

Order.asc( "reviewCaseStudentInformation.lastName")

几乎不知所措。有什么建议吗?

【问题讨论】:

    标签: java hibernate join restriction


    【解决方案1】:

    您需要创建另一个标准——即子标准——像这样:

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

    附言。我认为 ReviewCaseCaseReview 上的一个字段并没有帮助......它使代码相当混乱!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 2011-10-08
      • 1970-01-01
      • 2013-01-04
      • 2011-10-08
      • 2010-09-16
      相关资源
      最近更新 更多