2011-09-28 143 views
0

我试图四处寻找有关使用Hibnerate返回列表的信息,但无法找到与我正在查找的内容相匹配的内容,因此需要一些建议。需要Hibernate帮助

我有以下类

BPDataPK:

public class BPDataPK implements Serializable { 
    private String id; 
    private int userProfile; 
    private Date when;  
     ..... 
    } 

BPData:

public class BPData implements Serializable { 
    private BPDataPK dataPK; 
    private Date sessionStart; 
    ... 
} 

HibernateBPDataDAO:

public class HibernateBPDataDAO extends HibernateDaoSupport implements IBPDataDAO{ 
    .... 
public BPData[] getSessionBPData(Session session) throws Exception { 
     /**I need to get a list of BPData that matches the following 
     1. BPDataPK.id== session.getID; 
     2. BPDataPK.userProfile == session.getUserProfile; 
     **3. BPData.sessionStart == session.getSessionStart();** 
     */ 
    } 
} 

如何返回匹配两个主键和一个非主键的BPData列表?

回答

1

你不应该环顾了解一些信息。相反,你应该阅读reference documentation

本文档包含专门用于使用HQL查询语言进行查询的完整章节,以及专用于查询条件的另一章。既然你有一个固定的一套标准在这里,HQL是更适合的任务:

String hql = "select b from BPData b where b.dataPK.id = :id" 
      + " and b.dataPK.userProfile = :profile" 
      + " and b.sessionStart = :sessionStart"; 
Query q = hibernateSession.createQuery(hql); 
q.setString("id", session.getID()); 
q.setInt("profile", session.getUserProfile()); 
q.setTimestamp("sessionStart", session.getSessionStart()); // or setDate, depending on the type of this field 
List<BPData> result = q.list(); 
+0

感谢您的及时答复。 但是我得到一个意外的标记[b] [从...中选择b] 我还访问了您给出的参考,它们也使用了类似的模式作为您的语法。 –

+0

我忘了b别名。我的答案是固定的。如果你已经阅读过文档,你可以自己找到它。 –

+0

再次感谢您的帮助。 我没有注意到这种差异。 :$ 我简化了HQL来检查sessionStart,但是hibnerate没有返回任何数据。 在MYSQL数据库中,内容是(日期时间数据类型)2011-04-29 11:43:00 用q.setTimestamp(“sessionStart”,session.getSessionStart()); 和q.setDate(“sessionStart”,session.getSessionStart());没有成功。 getSessionStart返回一个java.util.Date; –

1

如果您使用的JPA immplementaion冬眠你这样做

@Entity 
@NamedQuery(
    name="findByMyQuery", 
    queryString="SELECT bpdata FROM BPData bpdata WHERE bpdata.dataPK = :sessionId AND bpdata.userProfile = :userProfile AND bpdata.sessionStart = :sessionStart " 
) 
public class BPData implements Serializable { 

    private BPDataPK dataPK; 
    private Date sessionStart; 
     ... 
    } 


public BPData[] getSessionBPData(Session session) throws Exception {  

    Query queryFindByMyQuery = entityManager.createNamedQuery("findByMyQuery"); 
    queryEmployeeByFirstName.setParameter("sessionId", session.getID()); 
    queryEmployeeByFirstName.setParameter("userProfile", session.getUserProfile()); 
    queryEmployeeByFirstName.setParameter("sessionStart", session.getSessionStart()); 
    return queryEmployessByFirstName.getResultList().toArray(); 
} 
+0

感谢您的及时回复,但是我对Hibernate很新,我不确定我是否使用JPA。但是为了保存和更新,我使用了getHibernateTemplate()。save(); –