2012-03-05 353 views
3

之間的區別我有2場一個微不足道的休眠實體 - ab
休眠標準2列

@Entity 
public class PlayerEntity { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer id; 

    @Column(nullable = false) 
    private Integer a; 

    @Column(nullable = false) 
    private Integer b; 
} 


我需要選擇所有的球員在那裏a - b > 5
這可以使用標準的Hibernate Criteria API完成嗎?我可以不知何故避免使用SQL/HQL這種相當典型的情況?
謝謝!

回答

8

可以使用Restrictions.sqlRestriction()使用SQL條件產生Criterion

List<PlayerEntity> playerList = (List<PlayerEntity>)session.createCriteria(PlayerEntity.class) 
.add(Restrictions.sqlRestriction("(a- b) > 5")).list(); 

這將生成SQL:select * from PlayerEntity where (a-b) > 5

如果你不想使用SQL在指定條件標準API,你可以定義(A - b)爲使用@Formula派生屬性:

@Entity 
public class PlayerEntity { 

    @Column(nullable = false) 
    private Integer a; 

    @Column(nullable = false) 
    private Integer b; 

    @Formula("a - b") 
    private Integer delta 
} 

List<PlayerEntity> playerList = (List<PlayerEntity>)session.createCriteria(PlayerEntity.class) 
.add(Restrictions.gt("delta", 5).list(); 

請注意@Formula的值是實際的列名稱而不是映射的屬性名稱。

+0

謝謝Ken。但正如我在一個問題中提到的,我試圖避免使用SQL/HQL。 – Storm 2012-03-05 17:45:41

+0

查看我的最新plz – 2012-03-06 02:23:03