`
wangmingyue
  • 浏览: 44885 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate多表连接 查询的解决方案

 
阅读更多

大家在用hibernate的时候总会遇到多表连接的查询,遇到这种问题 总是各种纠结。

方案1:建立视图 ,事先在数据库里面建立视图。然后建立这个视图的实体类,指定一个主键。然后建立这个视图的查询.


方案2:给实体类加临时属性HQL查询补充。

上代码:

实体类:

@Entity
@Table(name = "FLOW_RU_INFO")
public class FlowRuInfo implements java.io.Serializable {

// Fields

private String id;
private String deptid;
private String processinstanceid;
private String content;
private String creator;
private Date createtime;
private String flowtype;
private String flowcode;
private String formid;
private String state;
private String currentuserid;
private String pflowtype;
private String formNo;

//临时属性
private String task;
private String lastAudiUser;
private String nextUser;
private String userName;
private String deptName;


// Constructors

/** default constructor */
public FlowRuInfo() {
}



public FlowRuInfo(String id, String deptid, String processinstanceid,
String content, String creator, Date createtime, String flowtype,
String flowcode, String formid, String state, String currentuserid,
String pflowtype, String formNo, String task, String lastAudiUser,
String nextUser, String userName, String deptName) {
super();
this.id = id;
this.deptid = deptid;
this.processinstanceid = processinstanceid;
this.content = content;
this.creator = creator;
this.createtime = createtime;
this.flowtype = flowtype;
this.flowcode = flowcode;
this.formid = formid;
this.state = state;
this.currentuserid = currentuserid;
this.pflowtype = pflowtype;
this.formNo = formNo;
this.task = task;
this.lastAudiUser = lastAudiUser;
this.nextUser = nextUser;
this.userName = userName;
this.deptName = deptName;
}



// Property accessors
@GenericGenerator(name = "generator", strategy = "uuid.hex")
@Id
@GeneratedValue(generator = "generator")
@Column(name = "ID", unique = true, nullable = false, length = 32)
public String getId() {
return this.id;
}

public void setId(String id) {
this.id = id;
}

@Column(name = "DEPTID", length = 32)
public String getDeptid() {
return this.deptid;
}

public void setDeptid(String deptid) {
this.deptid = deptid;
}

@Column(name = "PROCESSINSTANCEID", length = 100)
public String getProcessinstanceid() {
return this.processinstanceid;
}

public void setProcessinstanceid(String processinstanceid) {
this.processinstanceid = processinstanceid;
}

@Column(name = "CONTENT", length = 800)
public String getContent() {
return this.content;
}

public void setContent(String content) {
this.content = content;
}

@Column(name = "CREATOR", length = 32)
public String getCreator() {
return this.creator;
}

public void setCreator(String creator) {
this.creator = creator;
}


@Column(name = "CREATETIME", length = 7)
public Date getCreatetime() {
return this.createtime;
}

public void setCreatetime(Date createtime) {
this.createtime = createtime;
}

@Column(name = "FLOWTYPE", length = 32)
public String getFlowtype() {
return this.flowtype;
}

public void setFlowtype(String flowtype) {
this.flowtype = flowtype;
}

@Column(name = "FLOWCODE", length = 32)
public String getFlowcode() {
return this.flowcode;
}

public void setFlowcode(String flowcode) {
this.flowcode = flowcode;
}

@Column(name = "FORMID", length = 32)
public String getFormid() {
return this.formid;
}

public void setFormid(String formid) {
this.formid = formid;
}

@Column(name = "STATE", length = 1)
public String getState() {
return this.state;
}

public void setState(String state) {
this.state = state;
}

@Column(name = "CURRENTUSERID", length = 32)
public String getCurrentuserid() {
return this.currentuserid;
}

public void setCurrentuserid(String currentuserid) {
this.currentuserid = currentuserid;
}

@Column(name = "PFLOWTYPE", length = 32)
public String getPflowtype() {
return this.pflowtype;
}

public void setPflowtype(String pflowtype) {
this.pflowtype = pflowtype;
}


@Column(name = "FORM_NO", length = 32)
public String getFormNo() {
return formNo;
}

public void setFormNo(String formNo) {
this.formNo = formNo;
}

@Transient //这种是临时属性的注解
public String getTask() {
return task;
}

public void setTask(String task) {
this.task = task;
}

@Transient
public String getLastAudiUser() {
return lastAudiUser;
}

public void setLastAudiUser(String lastAudiUser) {
this.lastAudiUser = lastAudiUser;
}
@Transient
public String getNextUser() {
return nextUser;
}

public void setNextUser(String nextUser) {
this.nextUser = nextUser;
}
@Transient
public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}
@Transient
public String getDeptName() {
return deptName;
}

public void setDeptName(String deptName) {
this.deptName = deptName;
}

}


HQL查询语句:

//hql多表连接 拼装实体
String hql="select new com.entity.flow.FlowRuInfo(t.id,t.deptid,t.processinstanceid,"
+"t.content, t.creator, t.createtime, t.flowtype,"
+"t.flowcode, t.formid, t.state, t.currentuserid,"
+"t.pflowtype, t.formNo, t.creator, t.creator,"
+"t.creator, u.empName, d.depName) from FlowRuInfo t,Department d,User u where t.creator=u.userid and d.depId=t.deptid order by t.createtime desc";

分享到:
评论

相关推荐

    Hibernate 多数据库支持解决方案

    总之,为了实现Hibernate对多数据库的支持,需要精心设计和配置,以确保代码的可移植性,同时兼顾性能和数据一致性。以上各点提供了实现这一目标的基础,但实际项目中可能还需要解决更多特定于数据库的问题。通过...

    hibernate的中文问题的解决方案

    ### Hibernate中文问题解决方案 在开发基于Java的应用程序时,Hibernate作为一个强大的对象关系映射(ORM)框架被广泛采用。然而,在处理中文字符时,开发者可能会遇到各种各样的问题,如乱码显示等。本文将详细...

    MySQL+Hibernate下连接空闲8小时自动断开问题解决方案.pdf

    本文讨论了 MySQL+Hibernate 连接空闲8小时自动断开的问题,并提供了相关的解决方案。通过使用 C3P0 连接池机制,可以解决连接空闲8小时自动断开的问题。同时,需要进行测试和部署,以确保连接池机制正确地工作。

    HIbernate免注解实现操作数据库 及Hibernate3连接SQL的BUG解决办法

    接下来,我们讨论Hibernate 3中连接SQL的常见问题及解决方案: 1. **连接池问题**: 如果在连接数据库时遇到问题,可能是由于连接池配置不当导致的。确保正确设置了连接池的大小、超时时间等参数,并检查数据库...

    MySQL+Hibernate下连接空闲8小时自动断开问题解决方案.docx

    MySQL+Hibernate 连接空闲8小时自动断开问题解决方案 知识点1: Hibernate 的连接池机制 在 Hibernate 中,默认情况下 使用的是 DriverManagerConnectionProvider,这是一个简单的连接池机制。它将打开的连接缓存在...

    Hibernate连接Access

    然而,对于小型项目或学习目的,Hibernate连接Access提供了一个简单且易于上手的解决方案。 总的来说,"Hibernate连接Access"涉及了Java开发中ORM的概念、Hibernate框架的配置和使用、数据库连接的建立、以及对象与...

    hibernate映射和查询

    Hibernate 是一个流行的 Java 应用程序开发框架,它提供了一个持久层解决方案,简化了数据库操作。对于初学者来说,理解 Hibernate 的映射和查询机制是至关重要的,因为它们构成了 Hibernate 核心功能的基础。 **一...

    HibernateSpring多数据库解决方案.doc

    总结起来,这个多数据库解决方案利用Spring的IoC容器管理和配置了多个数据源,同时结合Hibernate提供了ORM功能。通过`OpenSessionInView`模式,确保了Web请求中的持久化操作能在合适的Session上下文中进行。这样的...

    Myeclipse 10.0 + Hibernate 4.3.5 连接 Oracle 11G的演示代码

    在这个过程中,开发者可能遇到过时的方法问题,例如`buildSessionFactory()`,但在提供的代码中找到了替代解决方案。 首先,Myeclipse 10.0是Eclipse的一个增强版本,它为Java开发提供了更多的功能,如内置服务器...

    Spring+Hibernate下的数据库连接动态切换

    ### Spring+Hibernate下的数据库连接动态切换 #### 一、引言 在开发多租户或多数据库环境的应用系统时,往往需要实现动态切换数据库...对于需要支持多租户或多数据库环境的应用而言,这是一种非常实用的技术解决方案。

    hibernate使用c3p0连接池的资料

    #### 五、常见问题与解决方案 1. **连接泄漏**:确保Session关闭,避免Session持有连接过长时间导致资源浪费。 2. **性能优化**:合理设置C3P0参数,如增加连接池大小、调整连接回收策略等。 3. **异常处理**:对于...

    spring+hibernate和spring+myBatis实现连接多个数据库,同时操作的项目

    "spring+hibernate和spring+myBatis实现连接多个数据库,同时操作的项目"是针对这种需求的一个解决方案,旨在提供一种灵活且动态的数据源切换机制。 首先,Spring框架作为Java领域中最受欢迎的应用框架之一,其强大...

    Hibernate连接Mycat例子详解

    在IT行业中,数据库的扩展性和高可用性是关键问题,Mycat作为一款开源的分布式数据库中间件,为解决这些问题提供了方案。而Hibernate作为Java领域内的一个流行持久层框架,它简化了数据库操作,使开发者能更专注于...

    hibernate4多租户项目

    这种多租户解决方案适用于需要为大量客户提供服务,但又希望保持低维护成本和高数据安全性的SaaS(Software as a Service)产品。通过这种方式,开发者可以减少为每个租户创建单独数据库实例的工作,同时保证了数据...

    hibernate将本地SQL查询结果封装成对象(最终).zip

    Hibernate是一个开源的ORM框架,它为Java应用程序提供了数据持久化的解决方案。它通过映射Java类到数据库表,使得开发者可以避免编写大量的JDBC代码,而是以对象的方式操作数据。 2. Hibernate配置: 在使用...

    hibernate权威整理文档!

    Hibernate作为一个轻量级的Java EE解决方案,广泛应用于各种项目中。 二、初识Hibernate 1. Hibernate环境搭建 要开始使用Hibernate,首先需要下载Hibernate的开发包(如3.6.10版本)以及相关的依赖库,包括Slf4j...

    hibernate的配置使用和各种查询

    Hibernate是一种开源的对象关系映射(Object-Relational Mapping,简称ORM)框架,它为Java应用提供了利用SQL数据的持久化解决方案。通过ORM技术,开发人员可以将Java对象映射到数据库表上,从而避免了大量的SQL代码...

    hibernate N+1问题解决办法

    本文将详细探讨Hibernate中的N+1问题,并提供有效的解决方案。 **N+1查询问题的由来** 当我们在Hibernate中使用懒加载或集合查询时,如果在一次循环中对每个实体逐一触发关联对象的加载,就会产生N+1次数据库查询...

    Hibernate连接DB2

    本文将详细介绍 Hibernate 连接 DB2 的几种方式,并对每种方式的特点进行分析。 #### 二、JDBC 驱动简介 在讨论 Hibernate 如何连接 DB2 之前,首先需要了解 JDBC(Java Database Connectivity)的基础知识。JDBC ...

Global site tag (gtag.js) - Google Analytics