Hibernate 需要休眠帮助
我试着四处寻找关于使用Hibnerate返回列表的信息,但找不到与我正在寻找的内容相匹配的内容,因此需要一些建议 我有以下课程 BPDataPK:Hibernate 需要休眠帮助,hibernate,Hibernate,我试着四处寻找关于使用Hibnerate返回列表的信息,但找不到与我正在寻找的内容相匹配的内容,因此需要一些建议 我有以下课程 BPDataPK: public class BPDataPK implements Serializable { private String id; private int userProfile; private Date when; ..... } public class BPData imple
public class BPDataPK implements Serializable {
private String id;
private int userProfile;
private Date when;
.....
}
public class BPData implements Serializable {
private BPDataPK dataPK;
private Date sessionStart;
...
}
BPData:
public class BPDataPK implements Serializable {
private String id;
private int userProfile;
private Date when;
.....
}
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列表???您不应该四处寻找某些信息。相反,你应该阅读这本书
本文档有一整章专门介绍使用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();
String hql=“从BPData b中选择b,其中b.dataPK.id=:id”
+“和b.dataPK.userProfile=:profile”
+“和b.sessionStart=:sessionStart”;
查询q=hibernateSession.createQuery(hql);
q、 setString(“id”,session.getID());
q、 setInt(“profile”,session.getUserProfile());
q、 setTimestamp(“sessionStart”,session.getSessionStart());//或设置日期,具体取决于此字段的类型
列表结果=q.List();
如果您使用的是hibernate的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();
}
谢谢你的及时回复。但是我得到了一个意外的标记[b][选择b from…]我还访问了您提供的引用,它们也使用了与您的语法类似的模式。我忘记了b别名。我的答案是固定的。如果您阅读了文档,您可以自己找到它。再次感谢您的帮助。我没有注意到这种差异我已经简化了HQL,只检查sessionStart,但HibGenerate没有返回任何数据。在MYSQL数据库中,内容是(datetime数据类型)2011-04-29 11:43:00,使用q.setTimestamp(“sessionStart”,session.getSessionStart())进行尝试;和q.setDate(“sessionStart”,session.getSessionStart());没有成功。getSessionStart返回java.util.Date;谢谢你的及时回复,不过我对Hibernate很陌生,我不确定我是否在使用JPA。但是,为了保存和更新,我使用了getHibernateTemplate().save();