2011-09-28 2 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(); –