我有2个bean:Analysist,ExpirementMission。
Analysist,中有 @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id; private String loginId; private String name; private String password; private String position; @OneToMany(fetch = FetchType.EAGER, targetEntity = ExpirementMission.class, cascade = CascadeType.ALL)
@JoinColumns(value = { @JoinColumn(name = "analysist_id", referencedColumnName = "id") })
private List<ExpirementMission> expirementMissions = new ArrayList<ExpirementMission>();ExpirementMission 中有: @Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id; @Column
private String expriement;
private String state;
private String sort;
private String serialNumber;
private String batchNumber;
private Date Sdate;问下当我查询Analysist一个实例对象中的expirementMissions 属性时,能不能再对expirementMissions 的进行一个条件匹配,比如对state的值进行一个值得匹配,我现在的查询语句是:
Criteria criteria = this.sessionFactory.getCurrentSession()
.createCriteria(Analysist.class);
criteria.add(Restrictions.eq("loginId", analysist.getLoginId()));

List<ExpirementMission> missions = ((Analysist) criteria.list().get(0))
.getExpirementMissions();
但获得的missions 列表,是无差别的。能不能再对misssions中,每个mission对象在上述语句中插入一段代码,能对ExpirementMission bean对象以state属性进行一次匹配。
能这样吗?

解决方案 »

  1.   

    像这样的:    
    Criteria ac= session.createCriteria(Analysist.class);   
        Criteria ec= roomCriteria.createCriteria("expirementMissions");   
        ec.add(Restrictions.eq("state", "testname"));   
        List result= ac.list(); // 只列出 expirementMissions中state为testname的Analysist
      

  2.   

    第二句改成    Criteria ec= ac.createCriteria("expirementMissions");   写错了
      

  3.   

    // 只列出 expirementMissions中state为testname的Analysist
    我要列出的不是Analysist啊我意思。每个Analysist有个expirementMissions的列表,然后元素的泛型就是ExpirementMission,想对ExpirementMission中的state对象进行匹配。但是,state与Analysist无关啊。state是由其他操作来定值,然后想通过只通过analysist来查询
    大神你的代码。发现 
    Criteria ec= roomCriteria.createCriteria("expirementMissions");   
        ec.add(Restrictions.eq("state", "testname"));  
    有影响,如果state 不匹配似乎没法返回值。但是如果匹配的话,还是输出全部的元素。 
      

  4.   


    好吧,经过思考。以及感谢splendid_java,这个问题。我一开始就思考错了hibernate,查询的第一对象时Analysist bean,所以无论怎么添加条件,最终返回的是Analysist bean,则我要查讯的结果是Analysist的expirementMissions属性。那么这个expirementMissions是绑定与Analysist 的,所以应该从ExpirementMission bean入手应该实现双边关系了单边关系不能维持了