2015-10-19 50 views
0

我有3個實體通過onetoone關係連接。我的目標是獲得使用休眠條件的實體,其中match.status != null。並且如何告訴hibernate不要加入algo實體導致,應該是(pick.algo = null)。如何在休眠條件中使用連接列?

@Entity 
public class Pick { 
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private int pid; 

    @Column(columnDefinition="DATETIME") 
    private Date insertTime; 

    @Column(columnDefinition="DATETIME") 
    private Date setupResTime; 

    @OneToOne 
    private DbMatch match; 

    @OneToOne 
    private Algo algo; 

    @Transient 
    private Integer algoID; 
    .... 

條件查詢:

public List<Pick> getPicksHistory(){ 
    Criteria criteria = session.createCriteria(Pick.class); 
    criteria.add(Restrictions.isNotNull("match.status")); 
    return criteria.list(); 

}

回答

0

您可以添加別名,並應用條件別名

Criteria criteria = session.createCriteria(Pick.class); 
criteria.createAlias("match", "match", JoinType.INNER_JOIN); //<--- 
criteria.add(Restrictions.isNotNull("match.status")); 

,讓你可以使用例如空JoinType.LEFT_OUTER_JOIN