请教一个hibernate还有人用吗左连接的问题

原始发表时间:
项目做到现在比较头痛的问题之一就是hibernate引入对启动时间的影响。
我做的是用swing开发的客户端,提供给用户用来登记一些信息,但是由于功能很多,所以有一部分交给我们组其他同事协助完成。
大家比较熟悉hibernate,也许换那种直接操作对象的编码方式,所以有许多操作数据的代码都依赖于hibernate,而我受到上一个项目的影响,编码时都只是用ibatis这个ORM工具,所以在最后整合的时候遇到了头痛的事情。
如果只用ibatis的话,客户端启动大约是10秒左右,但是引入hibernate之后,42个hbm文件的加载初始化,就得消耗大约30多秒,界面完全显示估计约1分钟,这恐怕是许多用户无法忍受的。
后来在google上查询“hibernate startup”、“hibernate
performance”等关键字组合,发现了hibernate官方的194号讨论问题,讨论帖链接“
”,官方的回应是推荐使用“hibernate.cglib.use_reflection_optimizer=false”这个属性设置来提高启动速度,但是我自己和后面有关讨论者的实测都发现这个方法没有效果。
后面有位老兄推荐自己的项目“Hibernate Dynamic
Module”,据称可以解决hibernate启动时间过长的问题,不过看了一下2006年就没继续更新了,偶可是不敢用这种东东……
有一位兄弟的话倒是有点用处,说是将所有的class的hbm.xml配置文件都设置为lazy="false"这样就可以一定程度的提高启动速度,例如
&class name="myClass" table="myTable" lazy="false"&
刚刚实测了一下,效果不佳,只快了一两秒钟……
后来搜索到官方的一个讨论帖“startup time improvements”,链接是
还没有来得及实验其中给出的补丁,等试验完成后再续前文……
日23:17:49 补完本文
虽然很遗憾,但是截止目前为止没有找到合适的提高启动速度的方案。无论是官方还是坊间,我都没有找到解决方法,当然也说不定正在某一时刻正在有人敲击着良好解决该问题的代码,期待着……
后来只好采取“曲线报国”的策略,因为我开发的应用是C/S架构,所以想到增加一个线程初始化这些费时的配置信息,主线程来显示用户界面,这样用户可以第一时间看到界面,后台呢,则在用户慢悠悠的录入用户名和密码的时候初始化配置信息,给用户造成一些错觉,感觉等待的时间变少了。(之前的设计是完成Spring配置初始化后,用户界面才显示,这样用户会因为没看到界面而干着急,或者已经打电话到偶办公室来投诉了……)
hibernate很大的一个特点就是屏蔽了数据库的差异,使用了hibernate就应该尽量HQL来操作数据库(除非不得不用数据库本身的一些特性),而对于时间类型的比较hibernate也是支持的。
今天突然遇到一个问题,就是加了hibernate 框架的项目在启动的时候,特别慢,竟然达到了4分多钟,查来查去,看到我的bean类里*.hbm.xml,有这样的写法:
&http://www...
今天突然遇到一个问题,就是加了hibernate 框架的项目在启动的时候,特别慢,竟然达到了4分多钟,查来查去,看到我的bean类里*.hbm.xml,有这样的写法:
&http://www...
用jxl导入报表Excel数据,如果excel是日期格式的话需要减去8小时
package cn.itcast.elec.
import java.io.F
import java....
百度之后发现是
sessionFactory中的一个配置的问题
hibernate配置文件中是否有
update 这个配置
其它几个参数的意思:
时间的问题
mktime是个什么鬼
mktime()将结构体形式(tm)的时间转化为time_t格式
这里需要注意的是,得到的结果应该是UTC/GMT时间;而北京时间应该比该时间早8hour...
1,建立如下类 public class HibernatePlugIn implements PlugIn {
private String configF
// This metho...
做app中通讯模块时候,遇到这么一个问题,我们要显示的格式是,今天的显示今天的时分,昨天的显示昨天,在之前的就显示年月日
想着以后估计还会用 贴出来
以后直接用了
//判断日...
问题原因肯定和Hibernate有关,多半是配置文件的问题,检查下jdbc.properties里面的数据库连接配置,尤其注意下ip。
我报这个错是因为配置文件里面配置的ip出错了,我没有用loca...
没有更多推荐了,不迫切一行一个数组
d1只创建一次
封装成数组装进List
类+关联属性,而不是类了。
public List find(String hql) {
return HibernateSessionFactory.getSession()
.createQuery(hql)
import java.util.L
import org.hibernate.HibernateE
import org.hibernate.T
import dao.DeptDAO;
import dao.HibernateSessionF
import entity.D
public class DeptBiz {
private DeptDAO dao = new DeptDAO();
public void findTest() {
Transaction tx = null;
Dept dept = null;
tx = HibernateSessionFactory.getSession().beginTransaction();
String hql = "from Dept d left join d.emps e order by d.deptno";
List&Object[]& result = dao.find(hql);
for (Object[] row : result) {
System.out.println(row[0]+"\t"+row[1]);
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
if (tx != null) {
tx.rollback();
public void test5() {
DeptBiz biz = new DeptBiz();
biz.findTest();
import java.util.L
import org.hibernate.HibernateE
import org.hibernate.T
import dao.DeptDAO;
import dao.HibernateSessionF
import entity.D
public class DeptBiz {
private DeptDAO dao = new DeptDAO();
public void findTest() {
Transaction tx = null;
Dept dept = null;
tx = HibernateSessionFactory.getSession().beginTransaction();
String hql = "from Dept d left join fetch d.emps e order by d.deptno";
List&Dept& result = dao.find(hql);
for (Dept dept1 : result) {
System.out.println(dept1.getDeptno() + "\t" + dept1.getDname()
+ "\t" + dept1.getEmps().size());
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
if (tx != null) {
tx.rollback();
没有右迫切
因为右是完整的表,封装时时以左边为准,你不可能让它去找null做对应吧~
// 根据部门名称 查出所有该部门的雇员
// 等值连接 select * from Dept d,Emp e where d.deptno=e.
hql = "select e from Emp e,Dept d where d=e.dept and d.dname= ?";
hql = "from Dept d,Emp e where d=e.dept";
hql = "from Dept d,Emp e where d.deptno=e.dept.deptno";
// WRONG!!
hql = "from Dept d,Emp e where d.emps=e";
// emps是一个集合,不可以等于一个对象(数据类型都不对!) set!=Emp
// 隐式内连接
hql = "from Emp e where e.dept.dname= :dname";
* select e.EMPNO,e.ENAME,d.DNAME
* from EMP e inner join DEPT d on e.DEPTNO = d.DEPTNO;
* where....
关于内连接、左外连接和迫切左外连接
举例说明:
需求:把用户和订单查询出来
情况一:内连接查询。即只查询有订单的用户。
from User u inner join u.orders...
Hibernate高级查询方法(内含hibernate迫切左外连接检索策略)
投影查询——过滤部分字段
返回的List集合元素为Object[]
Query query = session.createQuery(&select c.cname, c.csex from C...
迫切左外连接、 左外连接、 迫切内连接、 内连接
package com.baidu.
import java.util.ArrayL
import java.util.LinkedHashS
import java.uti...
Hibernate中的迫切左外连接和左外连接
前边我们讲过了Hibernate的检索方式及它的四个细节,常见的五中检索方式是对象导航图语言(customers.getOrders())、通过OID获取对象(session.get(Departme...
Hibernate 学习笔记 之 HQL 内连接和迫切内连接
本demo采用5.x以前的queryHQL 内连接  以数组的方式进行存储 /***
* HQL 内连接
* 内连接查询hql语句写法:以客户和联系人为例
AdvertScreen对象和Advert对象
:首先对这两个对象配置映射关系,这里采用的是注解配置。@Entity
@Table(name = &app_ad_setting_cp&,catalo...
连接查询:
关系型数据库之所以强大,其中一个原因就是可以统一使用表来管理同类数据信息,并且可以在相关数据之间建立关系。作为支持关系型数据库的SQL语句来说,自然要对全面发挥这种强大功能提供支...
Hibernate迫切左外连接和迫切内连接
o迫切左外连接:
oLEFT JOIN FETCH 关键字表示迫切左外连接检索策略.
–list() 方法返回的集合中存放实体对象的引用, 每个 Department 对象关联的 Empl...
Hibernate第十篇【Hibernate查询详解、分页查询】
前言在Hibernate的第二篇中只是简单地说了Hibernate的几种查询方式….到目前为止,我们都是使用一些简单的主键查询阿…使用HQL查询所有的数据….本博文主要讲解Hibernate的查询操作...
内连接,迫切内连接,左外连接,迫切左外连接
查询出来的每一项为 object[]数组,左表存在object[0]中,右表存在object[1]中,object[0]和object[1]的关联关系有没有设置,取决于你的配置文...
没有更多推荐了,博客分类:
声明:我写的博客就是我的学习笔记,让我在忘记的时候可以在任何时候,任何地方,打开连接就可以看到,让我想起忘记的东西.
我的博客通常都有资料来源,只用于学习,没有任何其他目的,如果有版权问题,请跟我联系,如果对资料有什么疑问,可以留言!
我的email:
代码来源:SZGHRS项目,PersonDaoImpl.java
平台:struts,hibernate,spring,oracle
* 条件查询单位中的人员
public List&PersonDTO& findUnitPersonByCondition(TableTagBean ttb) throws DataAccessException {
// 查询字段
StringBuffer sbD = new StringBuffer("select " +
"p.PERSON_OID, " +
"p.NAME, " +
"p.ADMINISTRATIVE_DUTY, " +
"p.ADMINISTRATIVE_DUTY_LEVEL, " +
"p.DEGREE_CODE, " +
"p.DEPT_OID, " +
"p.EDUCATION_LEVEL_CODE, " +
"p.SEX_CODE, " +
"p.AUDITING_FLAG, " +
"p.IS_SPECIAL, " +
"p.BIRTHDAY, "+
"p.POLITIC_STATUS_CODE, " +
"o.ORG_NAME");
// 统计总记录数
StringBuffer sbTo = new StringBuffer("select count(p.PERSON_OID)");
String unitOid=ttb.getCondition().get("UNIT_OID");
if(unitOid==null)
StringBuffer sb = new StringBuffer();
sb.append(" from PERSON p,ORG o ");
sb.append(" where o.end_date is null& and o.ORG_INT_OID = p.DEPT_OID(+) and p.UNIT_OID='" + unitOid + "' and (p.IS_ACTIVE is null or& p.IS_ACTIVE&&'N')");
// 姓名查询
String queryname = ttb.getCondition().get("NAME");
if (queryname != null) {
sb.append(" and p.NAME like '%" + queryname + "%'");
//内设机构
String DEPT_OID=ttb.getCondition().get("DEPT_OID");
if (DEPT_OID != null && DEPT_OID.length()&0) {
sb.append(" and p.DEPT_OID =" + DEPT_OID );
// 职务层次查询
String administrative_Duty_Level = ttb.getCondition().get("ADMINISTRATIVE_DUTY_LEVEL");
if (administrative_Duty_Level != null) {
sb.append(" and p.ADMINISTRATIVE_DUTY_LEVEL = '" + administrative_Duty_Level + "'");
// 年龄查询,参数格式yyyy/MM/dd
String BIRTHDAY_S = ttb.getCondition().get("BIRTHDAY_S");
if (BIRTHDAY_S != null && BIRTHDAY_S.length()&0) {
sb.append(" and p.BIRTHDAY & to_date('" + BIRTHDAY_S + "','yyyy-MM-dd')");
String BIRTHDAY_E = ttb.getCondition().get("BIRTHDAY_E");
if (BIRTHDAY_E != null && BIRTHDAY_E.length()&0) {
sb.append(" and p.BIRTHDAY & to_date('" + BIRTHDAY_E + "','yyyy-MM-dd')");
String DEGREE_CODE = ttb.getCondition().get("DEGREE_CODE");
if (DEGREE_CODE != null && DEGREE_CODE.length()&0) {
sb.append(" and p.DEGREE_CODE='" + DEGREE_CODE + "'");
// 学历查询条件
String EDUCATION_LEVEL_CODE = ttb.getCondition().get("EDUCATION_LEVEL_CODE");
if (DEGREE_CODE != null && DEGREE_CODE.length()&0) {
sb.append(" and p.EDUCATION_LEVEL_CODE='" + EDUCATION_LEVEL_CODE + "'");
// 政治面貌
String POLITIC_STATUS_CODE = ttb.getCondition().get("POLITIC_STATUS_CODE");
if (DEGREE_CODE != null && DEGREE_CODE.length()&0) {
sb.append(" and p.POLITIC_STATUS_CODE='" + POLITIC_STATUS_CODE + "'");
// 证件号码
String ID_NO = ttb.getCondition().get("ID_NO");
if (ID_NO != null && ID_NO.length()&0) {
sb.append(" and p.ID_NO like'%" + ID_NO + "%'");
String sort = ttb.getOrderBy();
boolean ASC = ttb.getAsc();
if ("ORG_NAME".equals(sort)) {
if (ASC) {
sb.append(" order by o.ORG_NAME ASC");
sb.append(" order by o.ORG_NAME DESC");
if (ASC) {
sb.append(" order by p." + sort + " ASC");
sb.append(" order by p." + sort + " DESC");
StringBuffer header = new StringBuffer("select * from (select rowst.*,rownum rownum_ from ( ");
int start = ttb.getPage();
int limit = ttb.getPageSize();
StringBuffer tile = new StringBuffer("& ) rowst where rownum&" + limit + ") where rownum_&" + start);
header.append(sbD).append(sb).append(tile);
sbTo.append(sb);
log.info(sbTo.toString());
// 统计总记录数
Integer total=new Integer(this.getSession().createSQLQuery(sbTo.toString()).list().get(0).toString());
ttb.setTotal(total);
//查询记录
log.info(header);
List list = this.getSession().createSQLQuery(header.toString()).list();
if (list == null || list.size() == 0)
List&PersonDTO& personDtoList=new ArrayList&PersonDTO&();
for (int i = 0; i & list.size(); i++) {
Object[] queryResult = (Object[]) list.get(i);
String personOidResult = queryResult[0]==null?null:queryResult[0].toString();
String nameResult = queryResult[1]==null?null:queryResult[1].toString();
String administrativeDutyResult = queryResult[2]==null?null:queryResult[2].toString();
String administrativeDutyLevelResult = queryResult[3]==null?null:queryResult[3].toString();
String degreeCodeResult = queryResult[4]==null?null:queryResult[4].toString();
String deptOidResult = queryResult[5]==null?null:queryResult[5].toString();
String educationLevelCodeResult = queryResult[6]==null?null:queryResult[6].toString();
String sexCodeResult = queryResult[7]==null?null:queryResult[7].toString();
String auditingFlagResult = queryResult[8]==null?null:queryResult[8].toString();
String isSpecialResult = queryResult[9]==null?null:queryResult[9].toString();
Date birthdayResult = queryResult[10]!=null?(Date)queryResult[10]:
String politicStatusCodeResult = queryResult[11]==null?null:queryResult[11].toString();
String orgNameResult = queryResult[12]==null?null:queryResult[12].toString();
PersonDTO personDto=new PersonDTO();
personDto.setPersonOid(new Long(personOidResult));
personDto.setName(nameResult);
personDto.setAdministrativeDuty(administrativeDutyResult);
personDto.setAdministrativeDutyLevel(administrativeDutyLevelResult);
personDto.setDegree(degreeCodeResult);
personDto.setDeptName(orgNameResult);
personDto.setEducationLevelCode(educationLevelCodeResult);
personDto.setSexCode(sexCodeResult);
personDto.setAuditingFlag(auditingFlagResult);
personDto.setIsSpecial(isSpecialResult);
personDto.setBirthday(birthdayResult);
personDto.setPoliticStatusCode(politicStatusCodeResult);
personDtoList.add(personDto);
return personDtoL
完整的SQL语句:
Hibernate: select count(p.PERSON_OID) from PERSON p,ORG o& where o.end_date is null& and p.DEPT_OID = o.ORG_INT_OID(+) and p.UNIT_OID='70' and (p.IS_ACTIVE is null or& p.IS_ACTIVE&&'N') order by p.person_Oid ASC
Hibernate: select * from (select rowst.*,rownum rownum_ from ( select p.PERSON_OID, p.NAME, p.ADMINISTRATIVE_DUTY, p.ADMINISTRATIVE_DUTY_LEVEL, p.DEGREE_CODE, p.DEPT_OID, p.EDUCATION_LEVEL_CODE, p.SEX_CODE, p.AUDITING_FLAG, p.IS_SPECIAL, p.BIRTHDAY, p.POLITIC_STATUS_CODE, o.ORG_NAME from PERSON p,ORG o& where o.end_date is null& and p.DEPT_OID = o.ORG_INT_OID(+) and p.UNIT_OID='70' and (p.IS_ACTIVE is null or& p.IS_ACTIVE&&'N') order by p.person_Oid ASC& ) rowst where rownum&30) where rownum_&0
浏览: 59995 次
来自: 深圳
这种隐藏贴还是不要发的好
lz,我建议你这类纯api的东西,可以找份js api手册藏着 ...
不错。学到了不少东西!
lz是要告诉我们函数的知识,还是在问问题??话说上面那段见的眼 ...
当然不一样,函数的length在js里面是一个比较没用的东西, ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'项目中遇到的情况,需要查询广告主所有的广告及登录的网站主是否申请的状态,广告与网站主的关系存在fh_ad_webmaster 表中。
select a.id id,
e.status status,
a.name name,
a.type type,
a.picSize picSize,
a.checkType checkType,
a.startTime startTime,
a.endTime endTime,
c.AdMaster AdMaster,
c.signPic signPic,
c.webUrl webUrl,
c.webName webName,
d.catelogName catelogName,
b.detailExplanation detailExplanation,
b.squeezePercent squeezePercent,
b.createTime createTime,
b.type paytype,
b.squeeze squeeze,
c.companyName companyName,
a.picPath picPath,
a.linkText linkText
from fh_ad_base a
left join fh_ad_paynormal b on a.merchanter = b.adMasterId
and a.getMoneyType=b.id
left join fh_union_admaster c on c.AdMaster = a.merchanter
left join fh_union_catalog d on c.webType = d.id
left join fh_ad_webmaster e on e.acId = a.id and e.webMasterId =
'ffface0004'
where a.merchanter = 'ffface0001' and
a.status = 1
order by id desc
a.`name` adname,a.`type` adtype,a.`picSize` size,a.`putinType` puttype,
a.`checkType` checktype,a.`startTime` starttime,a.`endTime` endtime,
a.`picPath`,a.`linkText` linktext,
b.`name` name ,b.`squeezeType` squeezeType,
c.`AdMaster` admaster, c.`companyName` comanyname,c.`signPic` signpic,c.`webName` webname,
c.`webUrl` weburl,
d.`catelogName`,d.id cid,
e.`status` entersataus
from `fh_union_admaster` c ,`fh_union_catalog` d,`fh_ad_paynormal` b,
`fh_ad_base` a left OUTER JOIN `fh_ad_webmaster` e on a.`id`=e.`acId` and e.`webMasterId`='ffface0004'
WHERE a.`getMoneyType`=b.`id` and c.`AdMaster`=a.`merchanter` and d.`id`=c.`webType`
and a.`merchanter`='ffface0001' and a.`status`=1
sql中左连接是什么意思啊,有什么作用啊?能否给个例子,谢谢大家
sql中左连接是什么意思啊,有什么作用啊?能否给个例子,谢谢大家
17:25flyysr | 浏览
mysql多表左连接查询例子参考
生成sql语句如下SELECT
affiche.id,
affiche.title,
affiche.content,
affiche.affiche_type,
mysql 左连接 自连接 例子
连接就是将两个表按照某个公共字段来拼成一个大表。
左连接就是在做连接是以左边这个表为标准,来遍历右边的表。
用户访问记录:
问题:查出看了湖南卫视但没有看北京卫视的用户信息
逻辑:先通...
注意:外连接,既能查询出符合条件的记录,也能根据一方强行将另一方查询出来。注意:在oracle中,将(+)出现在=号右边,称为左外连接;将(+)出现在=号左边,称为右外连接;左外或右外,本质上是一样的...
Oracle连接查询有3种:交叉连接、内连接、外连接。
交叉连接结果是其他连接结果的超集,外连接结果是内连接结果的超集。
接下的例子以departments_v、employees_v两个视图数据为例...
1.内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的
列值。内连接分三种:
 1&、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结
数据库:twt001
数据表:at1,at2,at3
参考文章:
问题描述:需要从两张表中查询想要的结果,通过两张表都有的相同字段进行关联查询。
比如,先用Where 进行查询:
注意,这里是用Where 进行关联查询的,可以查询到结果。问题还没暴露。
没有更多推荐了,当表的关联很多时,设置延迟加载能提高效率,但是再获得关联对象时报错。
User和Group关系是多对多
直接调用user.getGroups()会报错。
正确的应该是 :
在获得user对象时候获得groups关联对象的集合。
Session session = HibernateSessionFactory.getSession();
User user = (User) session.get(User.class, id);
user.getGroups().size();
session.close();
再调用user.getGroups()时正常。
对于hibernate懒加载模式报错处理
在开发项目的过程中碰到了一些和hibernate懒加载有关的错误,记录一下。
在实际开发中,我们常常会将两个表关联起来(设置外键),这在hibernate映射为对象时会变成两个对象关联(即一个对象...
Hibernate懒加载导致json数据对象传输异常的问题---(非常重要)
[console_demo][WARN] [ 19:49:35] org.springframework.web.servlet.mvc.support.Defau...
Hibernate懒加载问题导致View层无法获取关联数据的问题
在controller中查询出了一个数据,数据关联了另外一个对象,在页面中用A.GETB().GETXXX()的方式的时候就会报错,因为是懒加载,默认的session已经关闭了。解决问题的方式有以下几...
转自http://blog.163.com/huacai/blog/static//
在集成ssh2三大框架的时候很容易就会造成懒加载异...
前言在项目开发中,如果设置集合映射中一方的懒加载(lazy=true),那么在加载jsp页面中,集合元素获取有时候会报错,session关闭的问题。而本文总结了我在学习hibernate过程中,解决h...
懒加载异常处理方案.
hibernate 默认加载模式是懒加载模式
@ManyToOne(fetch = FetchType.LAZY)
那么当我们从后台返回数据至前台页面时候
例如使用vue.js从返回的l...
首先看一下什么是懒加载:
所谓懒加载(lazy)就是延时加载,延迟加载。
什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载。
至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存...
解决Hibernate 注解在属性上 ,多对一,一对一懒加载 当调用one那一方getId 也会查数据库的问题
使用 hibernate5.10 版本 spring boot jpa 搭建测试
首先这个问题出现的原因是把注解写在了属性上并且fetchType=lazy,写在属性上找起来方便,但是也带了一个问题,...
没有更多推荐了,}

我要回帖

更多关于 hibernatespring 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信