`
zhiweiofli
  • 浏览: 515083 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate学习手记(4)--自定义查询

阅读更多

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 jar包:hibernate-commons-annotations-4.0.1.Final.jar等

    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 ...

    hibernatetools-Update-4.1.1.Final_2013-12-08_01-06-33-B605.zip

    4. **逆向工程**:可以从现有数据库生成DDL脚本,或生成Hibernate的配置文件(hibernate.cfg.xml)和映射文件(.hbm.xml)。 5. **映射文件与实体类同步**:当数据库表结构发生变化时,可以更新映射文件,保持与...

    hibernate-configuration-3.0.dtd、hibernate-mapping-3.0.dtd

    此外,`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-jpa-2.1-api-1.0.0.final-sources.jar 源码

    hibernatetools-Update-4.1.1.Final_2013-12-08_01-06-33-B605

    Hibernate Tools是开发者在使用Hibernate框架进行Java应用程序开发时的重要辅助工具,它为Eclipse IDE提供了强大的集成支持,包括对象关系映射(ORM)的可视化设计、逆向工程、数据库生成、HQL和SQL查询编辑等功能。...

    hibernate-commons-annotations-5.0.1.Final.jar

    在本文中,我们将深入探讨`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-2.0-api-1.0.1.Final-sources.jar hibernate jpa 源代码

    hibernate-jpa-2.0-api-1.0.1.Final.jar

    hibernate-jpa-2.0-api-1.0.1.Final.jar

    hibernate-release-5.2.10

    2. **库文件**:包含jar包,如hibernate-core.jar、hibernate-entitymanager.jar等,这些是我们在项目中引入Hibernate时需要用到的依赖库。 3. **文档**:通常包括用户指南、API文档、开发者文档等,这些文档提供了...

    HIBERNATE:Hibernate 学习一--注解方式自动建表

    这篇博客"Hibernate学习一--注解方式自动建表"主要探讨了如何使用Hibernate的注解来实现数据库表的自动化创建。 在Java编程中,注解(Annotation)是一种元数据,它提供了在代码中插入信息的方式,这些信息可以被...

    Hibernate稳定版(hibernate-release-5.3.23.Final.zip)

    Hibernate稳定版(hibernate-release-5.3.23.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。

    hibernate-jpa-2.1-api-1.0.0.final.jar.zip

    `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稳定版(hibernate-release-5.6.2.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。

    hibernate-release-4.1.4

    【标题】"hibernate-release-4.1.4" 是Hibernate框架的一个版本发布,具体为4.1.4.Final。Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发人员在处理数据库时使用面向对象的概念,极大地简化了数据库...

    hibernate-release-5.0.7.Final.zip

    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.5.1.0.jar全部

    列如: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

    hibernate-commons-annotations-5.1.0.Final.jar

    hibernate-distribution-3.3.1.GA

    很多人为了配置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-commons-annotations-4.0.1.Final.jar

    hibernate-core-5.4.24.Final.jar

    hibernate-core-5.4.24.Final.jar

Global site tag (gtag.js) - Google Analytics