在Hibernate 中,多主键表对应的实体会包含一个 ID 类, Hibernate 会把那多个主键封装成一个 ID 类以供调用。当要查询多主键表的其中一个主键时,往往要自定义一 SQL 语句或 HQL 语句来完成查询。
以下是Hibernate 实现自定义 SQL 与 HQL 查询的执行类:
//**************************************************************************
public class UtilSqlDAO extends BaseHibernateDAO{
private static final Log log =LogFactory. getLog (UtilSqlDAO. class );
public List findBySQL(Stringsql){
log .debug( "findSomething" );
List list;
try {
Sessionsession=getSession();
Transactiontx=session.beginTransaction();
list= session.createSQLQuery(sql).
addEntity( "c" ,Client. class ).
addEntity( "b" ,Booking. class ).
addEntity( "rt" ,Roomtype. class ).
addEntity( "r" ,Room. class ).list();
//实体加载的顺序要与 SQL 语句里表的查询顺序一致!
tx.commit();
session.close();
return list;
} catch (RuntimeExceptionre){
log .error( "findSomethingfailed" ,re);
throw re;
}
}
public List findhql(Stringhql){
log .debug( "findSomething" );
List list;
try {
Sessionsession=getSession();
Transactiontx=session.beginTransaction();
list= session.createQuery(hql) .list();
tx.commit();
session.close();
return list;
} catch (RuntimeExceptionre){
log .error( "findSomethingfailed" ,re);
throw re;
}
}
}
//*****************************************************************************
在这里,SQL 相对于 HQL 就要逊色一点了,每一次查询都要显式地调用 addEntity ()方法来加载对应的实体。不过 HQL 语句尽管强大但却难于读懂,所以在不熟悉 HQL 的情况下, SQL 仍是较佳选择。
//*****************************************************************************
private UtilSqlDAO SqlDAO ;
// 执行 SQL 语句的方法
public List findByVip (Stringvip){
SqlDAO = new UtilSqlDAO();
StringsqlStr= "select{c.*},{b.*},{rt.*},{r.*}" +
"fromclientc,bookingb,roomtypert,roomr" +
"wherec.c_vip=b.c_vipandb.rt_name=rt.rt_nameand
rt.rt_name=r.rt_nameandr.rs_no='10'andb.c_vip='" +
vip+ "'" ;
List res= SqlDAO .findBySQL(sqlStr);
if (!res.isEmpty()){
return res;
}
else {
return null ;
}
}
//**************************************************************************************
private UtilSqlDAO hqlDAO ;
// 执行 HQL 语句的方法
public List findSomethingByHQL(Stringproperty,Stringvalue){
hqlDAO = new UtilSqlDAO();
/*leftjoin***使用此种HQL查出来的List中,每个List节点包含3个Object对象,依次为goin,room,client;
*若加上fetch(意为抓取),则自动打包到一实体,即每个List节点之包含一个goin对象,room和client对象被加载到goin里了
**/
Stringhql= "fromGoingoinleftjoinfetchgoin.roomleftjoinfetchgoin.clientwheregoin." +property+ "='" +value+ "'" ;
return hqlDAO .findhql(hql);
}
相关推荐
hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-4.1.12.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar ...
4. **逆向工程**:可以从现有数据库生成DDL脚本,或生成Hibernate的配置文件(hibernate.cfg.xml)和映射文件(.hbm.xml)。 5. **映射文件与实体类同步**:当数据库表结构发生变化时,可以更新映射文件,保持与...
此外,`hibernate-configuration-3.0.dtd`还定义了如何设置JNDI数据源,以及如何启用二进制日志、SQL查询统计等功能。 接下来,我们转向`hibernate-mapping-3.0.dtd`。这个文件定义了Hibernate映射文件的语法规则,...
hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码 hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码
Hibernate Tools是开发者在使用Hibernate框架进行Java应用程序开发时的重要辅助工具,它为Eclipse IDE提供了强大的集成支持,包括对象关系映射(ORM)的可视化设计、逆向工程、数据库生成、HQL和SQL查询编辑等功能。...
在本文中,我们将深入探讨`hibernate-commons-annotations-5.0.1.Final.jar`的源码,了解其内部结构和主要功能。 一、元数据注解 HCA的核心在于提供了一系列的注解,如`@Entity`、`@Table`、`@Column`、`@Id`等,...
hibernate-jpa-2.0-api-1.0.1.Final-sources.jar hibernate jpa 源代码
hibernate-jpa-2.0-api-1.0.1.Final.jar
2. **库文件**:包含jar包,如hibernate-core.jar、hibernate-entitymanager.jar等,这些是我们在项目中引入Hibernate时需要用到的依赖库。 3. **文档**:通常包括用户指南、API文档、开发者文档等,这些文档提供了...
这篇博客"Hibernate学习一--注解方式自动建表"主要探讨了如何使用Hibernate的注解来实现数据库表的自动化创建。 在Java编程中,注解(Annotation)是一种元数据,它提供了在代码中插入信息的方式,这些信息可以被...
Hibernate稳定版(hibernate-release-5.3.23.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。
`hibernate-jpa-2.1-api-1.0.0.final.jar`是Hibernate对JPA 2.1规范的实现库,它使得开发者能够使用Hibernate的高效功能同时遵循JPA规范。 **1. Hibernate与JPA的关系** Hibernate最初作为一个独立的ORM框架,后来...
Hibernate稳定版(hibernate-release-5.6.2.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。
【标题】"hibernate-release-4.1.4" 是Hibernate框架的一个版本发布,具体为4.1.4.Final。Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发人员在处理数据库时使用面向对象的概念,极大地简化了数据库...
antlr-2.7.7.jar dom4j-1.6.1.jar geronimo-jta_1.1_spec-1.1.1.jar hibernate-commons-annotations-5.0.1.Final.jar hibernate-core-5.0.7.Final.jar hibernate-jpa-2.1-api-1.0.0.Final.jar jandex-2.0.0.Final....
列如:hibernate-core-5.1.0.Final.jar hibernate-ehcache-5.1.0.Final.jar hibernate-entitymanager-5.1.0.Final.jar hibernate-envers-5.1.0.Final.jar hibernate-c3p0-5.1.0.Final.jar hibernate-jpa-2.1-api-...
hibernate-commons-annotations-5.1.0.Final.jar
很多人为了配置jpa找这个动态产生字节码的jar文件,hibernate-distribution-3.3.1.GA包太大,而hibernate-distribution-3.3.2.GA的jar没有这个jar文件,希望对大家有用
hibernate-commons-annotations-4.0.1.Final.jar
hibernate-core-5.4.24.Final.jar