相关文章
更多最近更新
更多hibernate 多表 join 查询发现还是会重新load one-to-many 子表
2019-03-25 13:48|来源: 网路
原来的系统性能慢,今天在做性能调优,发现有一个多表查询存在性能问题。
我的hbm.xml配置文件
查询语句:
调试中的sql 日志:
从上述日志,我发现hibernate join查询后,还是重新做了select查询,调试了半天,没有什么眉目,希望有高人指导,谢谢!
补充:
两个与查询有关的配置参数
hibernate.max_fetch_depth 3
hibernate.default_batch_fetch_size 8
问题补充:
fetch 方式 select,subselect,join均试过,打印出来的sql语句相同,均存在n+1查询问题。
另外,一对多是可空的,即多的一端可以有一个或多个,也可以不存在。
另外,在创建critia时,已经设定了以做左连接方式join查询(JoinFragment.LEFT_OUTER_JOIN),应该来说会覆盖hbm配置文件中的设定。
问题补充:
现在的我的使用场景中,必须设置lazy=false,否则代码调整量比较大的。
问题补充:
我的问题主要有一个疑惑:从上述SQL语句中我们发现,hibernate确实已经使用了join方式查询,为什么还需要重新select呢?
我的hbm.xml配置文件
<one-to-one class="wm.model.ShopRate" lazy="false" name="shopRate" outer-join="true"/> <set cascade="all-delete-orphan" inverse="true" lazy="false" name="shopConditions" fetch="select" outer-join="true"> <key> <column name="shop_num" not-null="true"/> </key> <one-to-many class="wm.model.ShopCondition"/> </set> <set cascade="all-delete-orphan" inverse="true" lazy="false" name="shopHours" fetch="select" outer-join="true"> <key> <column name="shop_num" not-null="true"/> </key> <one-to-many class="wm.model.ShopHour"/> </set>
查询语句:
Criteria criteria = getSession().createCriteria(Shop.class, "s") .createAlias("s.shopHours", "h", JoinFragment.LEFT_OUTER_JOIN) .createAlias("s.shopRate", "r", JoinFragment.LEFT_OUTER_JOIN) .createAlias("s.shopConditions", "c", JoinFragment.LEFT_OUTER_JOIN) .add(Restrictions.eq("s.shopCity", cityName)) .add(Restrictions.eq("s.shopActived", true)) .add(Restrictions.eq("s.shopPublic", true)) .addOrder(Order.asc("s.shopNum")) .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); return criteria.list();
调试中的sql 日志:
Hibernate: /* load wm.model.ShopRate */ select shoprate0_.shop_num as shop1_36_0_, shoprate0_.taste_rating as taste2_36_0_, shoprate0_.service_rating as service3_36_0_, shoprate0_.response_rating as response4_36_0_, shoprate0_.total_rating as total5_36_0_, shoprate0_.reviews_count as reviews6_36_0_ from shop_rate shoprate0_ where shoprate0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopHours */ select shophours0_.shop_num as shop2_1_, shophours0_.shop_hour_id as shop1_1_, shophours0_.shop_hour_id as shop1_23_0_, shophours0_.shop_num as shop2_23_0_, shophours0_.time_from as time3_23_0_, shophours0_.time_to as time4_23_0_ from shop_hour shophours0_ where shophours0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopConditions */ select shopcondit0_.shop_num as shop2_1_, shopcondit0_.condition_id as condition1_1_, shopcondit0_.condition_id as condition1_37_0_, shopcondit0_.shop_num as shop2_37_0_, shopcondit0_.condition_mile as condition3_37_0_, shopcondit0_.condition_money as condition4_37_0_, shopcondit0_.condition_amount as condition5_37_0_, shopcondit0_.condition_response_time as condition6_37_0_ from shop_condition shopcondit0_ where shopcondit0_.shop_num=? Hibernate: /* load wm.model.ShopRate */ select shoprate0_.shop_num as shop1_36_0_, shoprate0_.taste_rating as taste2_36_0_, shoprate0_.service_rating as service3_36_0_, shoprate0_.response_rating as response4_36_0_, shoprate0_.total_rating as total5_36_0_, shoprate0_.reviews_count as reviews6_36_0_ from shop_rate shoprate0_ where shoprate0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopHours */ select shophours0_.shop_num as shop2_1_, shophours0_.shop_hour_id as shop1_1_, shophours0_.shop_hour_id as shop1_23_0_, shophours0_.shop_num as shop2_23_0_, shophours0_.time_from as time3_23_0_, shophours0_.time_to as time4_23_0_ from shop_hour shophours0_ where shophours0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopConditions */ select shopcondit0_.shop_num as shop2_1_, shopcondit0_.condition_id as condition1_1_, shopcondit0_.condition_id as condition1_37_0_, shopcondit0_.shop_num as shop2_37_0_, shopcondit0_.condition_mile as condition3_37_0_, shopcondit0_.condition_money as condition4_37_0_, shopcondit0_.condition_amount as condition5_37_0_, shopcondit0_.condition_response_time as condition6_37_0_ from shop_condition shopcondit0_ where shopcondit0_.shop_num=? Hibernate: /* load wm.model.ShopRate */ select shoprate0_.shop_num as shop1_36_0_, shoprate0_.taste_rating as taste2_36_0_, shoprate0_.service_rating as service3_36_0_, shoprate0_.response_rating as response4_36_0_, shoprate0_.total_rating as total5_36_0_, shoprate0_.reviews_count as reviews6_36_0_ from shop_rate shoprate0_ where shoprate0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopHours */ select shophours0_.shop_num as shop2_1_, shophours0_.shop_hour_id as shop1_1_, shophours0_.shop_hour_id as shop1_23_0_, shophours0_.shop_num as shop2_23_0_, shophours0_.time_from as time3_23_0_, shophours0_.time_to as time4_23_0_ from shop_hour shophours0_ where shophours0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopConditions */ select shopcondit0_.shop_num as shop2_1_, shopcondit0_.condition_id as condition1_1_, shopcondit0_.condition_id as condition1_37_0_, shopcondit0_.shop_num as shop2_37_0_, shopcondit0_.condition_mile as condition3_37_0_, shopcondit0_.condition_money as condition4_37_0_, shopcondit0_.condition_amount as condition5_37_0_, shopcondit0_.condition_response_time as condition6_37_0_ from shop_condition shopcondit0_ where shopcondit0_.shop_num=? Hibernate: /* load wm.model.ShopRate */ select shoprate0_.shop_num as shop1_36_0_, shoprate0_.taste_rating as taste2_36_0_, shoprate0_.service_rating as service3_36_0_, shoprate0_.response_rating as response4_36_0_, shoprate0_.total_rating as total5_36_0_, shoprate0_.reviews_count as reviews6_36_0_ from shop_rate shoprate0_ where shoprate0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopHours */ select shophours0_.shop_num as shop2_1_, shophours0_.shop_hour_id as shop1_1_, shophours0_.shop_hour_id as shop1_23_0_, shophours0_.shop_num as shop2_23_0_, shophours0_.time_from as time3_23_0_, shophours0_.time_to as time4_23_0_ from shop_hour shophours0_ where shophours0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopConditions */ select shopcondit0_.shop_num as shop2_1_, shopcondit0_.condition_id as condition1_1_, shopcondit0_.condition_id as condition1_37_0_, shopcondit0_.shop_num as shop2_37_0_, shopcondit0_.condition_mile as condition3_37_0_, shopcondit0_.condition_money as condition4_37_0_, shopcondit0_.condition_amount as condition5_37_0_, shopcondit0_.condition_response_time as condition6_37_0_ from shop_condition shopcondit0_ where shopcondit0_.shop_num=? Hibernate: /* load wm.model.ShopRate */ select shoprate0_.shop_num as shop1_36_0_, shoprate0_.taste_rating as taste2_36_0_, shoprate0_.service_rating as service3_36_0_, shoprate0_.response_rating as response4_36_0_, shoprate0_.total_rating as total5_36_0_, shoprate0_.reviews_count as reviews6_36_0_ from shop_rate shoprate0_ where shoprate0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopHours */ select shophours0_.shop_num as shop2_1_, shophours0_.shop_hour_id as shop1_1_, shophours0_.shop_hour_id as shop1_23_0_, shophours0_.shop_num as shop2_23_0_, shophours0_.time_from as time3_23_0_, shophours0_.time_to as time4_23_0_ from shop_hour shophours0_ where shophours0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopConditions */ select shopcondit0_.shop_num as shop2_1_, shopcondit0_.condition_id as condition1_1_, shopcondit0_.condition_id as condition1_37_0_, shopcondit0_.shop_num as shop2_37_0_, shopcondit0_.condition_mile as condition3_37_0_, shopcondit0_.condition_money as condition4_37_0_, shopcondit0_.condition_amount as condition5_37_0_, shopcondit0_.condition_response_time as condition6_37_0_ from shop_condition shopcondit0_ where shopcondit0_.shop_num=? Hibernate: /* load wm.model.ShopRate */ select shoprate0_.shop_num as shop1_36_0_, shoprate0_.taste_rating as taste2_36_0_, shoprate0_.service_rating as service3_36_0_, shoprate0_.response_rating as response4_36_0_, shoprate0_.total_rating as total5_36_0_, shoprate0_.reviews_count as reviews6_36_0_ from shop_rate shoprate0_ where shoprate0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopHours */ select shophours0_.shop_num as shop2_1_, shophours0_.shop_hour_id as shop1_1_, shophours0_.shop_hour_id as shop1_23_0_, shophours0_.shop_num as shop2_23_0_, shophours0_.time_from as time3_23_0_, shophours0_.time_to as time4_23_0_ from shop_hour shophours0_ where shophours0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopConditions */ select shopcondit0_.shop_num as shop2_1_, shopcondit0_.condition_id as condition1_1_, shopcondit0_.condition_id as condition1_37_0_, shopcondit0_.shop_num as shop2_37_0_, shopcondit0_.condition_mile as condition3_37_0_, shopcondit0_.condition_money as condition4_37_0_, shopcondit0_.condition_amount as condition5_37_0_, shopcondit0_.condition_response_time as condition6_37_0_ from shop_condition shopcondit0_ where shopcondit0_.shop_num=? Hibernate: /* load wm.model.ShopRate */ select shoprate0_.shop_num as shop1_36_0_, shoprate0_.taste_rating as taste2_36_0_, shoprate0_.service_rating as service3_36_0_, shoprate0_.response_rating as response4_36_0_, shoprate0_.total_rating as total5_36_0_, shoprate0_.reviews_count as reviews6_36_0_ from shop_rate shoprate0_ where shoprate0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopHours */ select shophours0_.shop_num as shop2_1_, shophours0_.shop_hour_id as shop1_1_, shophours0_.shop_hour_id as shop1_23_0_, shophours0_.shop_num as shop2_23_0_, shophours0_.time_from as time3_23_0_, shophours0_.time_to as time4_23_0_ from shop_hour shophours0_ where shophours0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopConditions */ select shopcondit0_.shop_num as shop2_1_, shopcondit0_.condition_id as condition1_1_, shopcondit0_.condition_id as condition1_37_0_, shopcondit0_.shop_num as shop2_37_0_, shopcondit0_.condition_mile as condition3_37_0_, shopcondit0_.condition_money as condition4_37_0_, shopcondit0_.condition_amount as condition5_37_0_, shopcondit0_.condition_response_time as condition6_37_0_ from shop_condition shopcondit0_ where shopcondit0_.shop_num=? Hibernate: /* load wm.model.ShopRate */ select shoprate0_.shop_num as shop1_36_0_, shoprate0_.taste_rating as taste2_36_0_, shoprate0_.service_rating as service3_36_0_, shoprate0_.response_rating as response4_36_0_, shoprate0_.total_rating as total5_36_0_, shoprate0_.reviews_count as reviews6_36_0_ from shop_rate shoprate0_ where shoprate0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopHours */ select shophours0_.shop_num as shop2_1_, shophours0_.shop_hour_id as shop1_1_, shophours0_.shop_hour_id as shop1_23_0_, shophours0_.shop_num as shop2_23_0_, shophours0_.time_from as time3_23_0_, shophours0_.time_to as time4_23_0_ from shop_hour shophours0_ where shophours0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopConditions */ select shopcondit0_.shop_num as shop2_1_, shopcondit0_.condition_id as condition1_1_, shopcondit0_.condition_id as condition1_37_0_, shopcondit0_.shop_num as shop2_37_0_, shopcondit0_.condition_mile as condition3_37_0_, shopcondit0_.condition_money as condition4_37_0_, shopcondit0_.condition_amount as condition5_37_0_, shopcondit0_.condition_response_time as condition6_37_0_ from shop_condition shopcondit0_ where shopcondit0_.shop_num=? Hibernate: /* load wm.model.ShopRate */ select shoprate0_.shop_num as shop1_36_0_, shoprate0_.taste_rating as taste2_36_0_, shoprate0_.service_rating as service3_36_0_, shoprate0_.response_rating as response4_36_0_, shoprate0_.total_rating as total5_36_0_, shoprate0_.reviews_count as reviews6_36_0_ from shop_rate shoprate0_ where shoprate0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopHours */ select shophours0_.shop_num as shop2_1_, shophours0_.shop_hour_id as shop1_1_, shophours0_.shop_hour_id as shop1_23_0_, shophours0_.shop_num as shop2_23_0_, shophours0_.time_from as time3_23_0_, shophours0_.time_to as time4_23_0_ from shop_hour shophours0_ where shophours0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopConditions */ select shopcondit0_.shop_num as shop2_1_, shopcondit0_.condition_id as condition1_1_, shopcondit0_.condition_id as condition1_37_0_, shopcondit0_.shop_num as shop2_37_0_, shopcondit0_.condition_mile as condition3_37_0_, shopcondit0_.condition_money as condition4_37_0_, shopcondit0_.condition_amount as condition5_37_0_, shopcondit0_.condition_response_time as condition6_37_0_ from shop_condition shopcondit0_ where shopcondit0_.shop_num=? Hibernate: /* load wm.model.ShopRate */ select shoprate0_.shop_num as shop1_36_0_, shoprate0_.taste_rating as taste2_36_0_, shoprate0_.service_rating as service3_36_0_, shoprate0_.response_rating as response4_36_0_, shoprate0_.total_rating as total5_36_0_, shoprate0_.reviews_count as reviews6_36_0_ from shop_rate shoprate0_ where shoprate0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopHours */ select shophours0_.shop_num as shop2_1_, shophours0_.shop_hour_id as shop1_1_, shophours0_.shop_hour_id as shop1_23_0_, shophours0_.shop_num as shop2_23_0_, shophours0_.time_from as time3_23_0_, shophours0_.time_to as time4_23_0_ from shop_hour shophours0_ where shophours0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopConditions */ select shopcondit0_.shop_num as shop2_1_, shopcondit0_.condition_id as condition1_1_, shopcondit0_.condition_id as condition1_37_0_, shopcondit0_.shop_num as shop2_37_0_, shopcondit0_.condition_mile as condition3_37_0_, shopcondit0_.condition_money as condition4_37_0_, shopcondit0_.condition_amount as condition5_37_0_, shopcondit0_.condition_response_time as condition6_37_0_ from shop_condition shopcondit0_ where shopcondit0_.shop_num=? Hibernate: /* load wm.model.ShopRate */ select shoprate0_.shop_num as shop1_36_0_, shoprate0_.taste_rating as taste2_36_0_, shoprate0_.service_rating as service3_36_0_, shoprate0_.response_rating as response4_36_0_, shoprate0_.total_rating as total5_36_0_, shoprate0_.reviews_count as reviews6_36_0_ from shop_rate shoprate0_ where shoprate0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopHours */ select shophours0_.shop_num as shop2_1_, shophours0_.shop_hour_id as shop1_1_, shophours0_.shop_hour_id as shop1_23_0_, shophours0_.shop_num as shop2_23_0_, shophours0_.time_from as time3_23_0_, shophours0_.time_to as time4_23_0_ from shop_hour shophours0_ where shophours0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopConditions */ select shopcondit0_.shop_num as shop2_1_, shopcondit0_.condition_id as condition1_1_, shopcondit0_.condition_id as condition1_37_0_, shopcondit0_.shop_num as shop2_37_0_, shopcondit0_.condition_mile as condition3_37_0_, shopcondit0_.condition_money as condition4_37_0_, shopcondit0_.condition_amount as condition5_37_0_, shopcondit0_.condition_response_time as condition6_37_0_ from shop_condition shopcondit0_ where shopcondit0_.shop_num=? Hibernate: /* load wm.model.ShopRate */ select shoprate0_.shop_num as shop1_36_0_, shoprate0_.taste_rating as taste2_36_0_, shoprate0_.service_rating as service3_36_0_, shoprate0_.response_rating as response4_36_0_, shoprate0_.total_rating as total5_36_0_, shoprate0_.reviews_count as reviews6_36_0_ from shop_rate shoprate0_ where shoprate0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopHours */ select shophours0_.shop_num as shop2_1_, shophours0_.shop_hour_id as shop1_1_, shophours0_.shop_hour_id as shop1_23_0_, shophours0_.shop_num as shop2_23_0_, shophours0_.time_from as time3_23_0_, shophours0_.time_to as time4_23_0_ from shop_hour shophours0_ where shophours0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopConditions */ select shopcondit0_.shop_num as shop2_1_, shopcondit0_.condition_id as condition1_1_, shopcondit0_.condition_id as condition1_37_0_, shopcondit0_.shop_num as shop2_37_0_, shopcondit0_.condition_mile as condition3_37_0_, shopcondit0_.condition_money as condition4_37_0_, shopcondit0_.condition_amount as condition5_37_0_, shopcondit0_.condition_response_time as condition6_37_0_ from shop_condition shopcondit0_ where shopcondit0_.shop_num=? Hibernate: /* load wm.model.ShopRate */ select shoprate0_.shop_num as shop1_36_0_, shoprate0_.taste_rating as taste2_36_0_, shoprate0_.service_rating as service3_36_0_, shoprate0_.response_rating as response4_36_0_, shoprate0_.total_rating as total5_36_0_, shoprate0_.reviews_count as reviews6_36_0_ from shop_rate shoprate0_ where shoprate0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopHours */ select shophours0_.shop_num as shop2_1_, shophours0_.shop_hour_id as shop1_1_, shophours0_.shop_hour_id as shop1_23_0_, shophours0_.shop_num as shop2_23_0_, shophours0_.time_from as time3_23_0_, shophours0_.time_to as time4_23_0_ from shop_hour shophours0_ where shophours0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopConditions */ select shopcondit0_.shop_num as shop2_1_, shopcondit0_.condition_id as condition1_1_, shopcondit0_.condition_id as condition1_37_0_, shopcondit0_.shop_num as shop2_37_0_, shopcondit0_.condition_mile as condition3_37_0_, shopcondit0_.condition_money as condition4_37_0_, shopcondit0_.condition_amount as condition5_37_0_, shopcondit0_.condition_response_time as condition6_37_0_ from shop_condition shopcondit0_ where shopcondit0_.shop_num=? Hibernate: /* load wm.model.ShopRate */ select shoprate0_.shop_num as shop1_36_0_, shoprate0_.taste_rating as taste2_36_0_, shoprate0_.service_rating as service3_36_0_, shoprate0_.response_rating as response4_36_0_, shoprate0_.total_rating as total5_36_0_, shoprate0_.reviews_count as reviews6_36_0_ from shop_rate shoprate0_ where shoprate0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopHours */ select shophours0_.shop_num as shop2_1_, shophours0_.shop_hour_id as shop1_1_, shophours0_.shop_hour_id as shop1_23_0_, shophours0_.shop_num as shop2_23_0_, shophours0_.time_from as time3_23_0_, shophours0_.time_to as time4_23_0_ from shop_hour shophours0_ where shophours0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopConditions */ select shopcondit0_.shop_num as shop2_1_, shopcondit0_.condition_id as condition1_1_, shopcondit0_.condition_id as condition1_37_0_, shopcondit0_.shop_num as shop2_37_0_, shopcondit0_.condition_mile as condition3_37_0_, shopcondit0_.condition_money as condition4_37_0_, shopcondit0_.condition_amount as condition5_37_0_, shopcondit0_.condition_response_time as condition6_37_0_ from shop_condition shopcondit0_ where shopcondit0_.shop_num=? Hibernate: /* load wm.model.ShopRate */ select shoprate0_.shop_num as shop1_36_0_, shoprate0_.taste_rating as taste2_36_0_, shoprate0_.service_rating as service3_36_0_, shoprate0_.response_rating as response4_36_0_, shoprate0_.total_rating as total5_36_0_, shoprate0_.reviews_count as reviews6_36_0_ from shop_rate shoprate0_ where shoprate0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopHours */ select shophours0_.shop_num as shop2_1_, shophours0_.shop_hour_id as shop1_1_, shophours0_.shop_hour_id as shop1_23_0_, shophours0_.shop_num as shop2_23_0_, shophours0_.time_from as time3_23_0_, shophours0_.time_to as time4_23_0_ from shop_hour shophours0_ where shophours0_.shop_num=? Hibernate: /* load one-to-many wm.model.Shop.shopConditions */ select shopcondit0_.shop_num as shop2_1_, shopcondit0_.condition_id as condition1_1_, shopcondit0_.condition_id as condition1_37_0_, shopcondit0_.shop_num as shop2_37_0_, shopcondit0_.condition_mile as condition3_37_0_, shopcondit0_.condition_money as condition4_37_0_, shopcondit0_.condition_amount as condition5_37_0_, shopcondit0_.condition_response_time as condition6_37_0_ from shop_condition shopcondit0_ where shopcondit0_.shop_num=?
从上述日志,我发现hibernate join查询后,还是重新做了select查询,调试了半天,没有什么眉目,希望有高人指导,谢谢!
补充:
两个与查询有关的配置参数
hibernate.max_fetch_depth 3
hibernate.default_batch_fetch_size 8
问题补充:
fetch 方式 select,subselect,join均试过,打印出来的sql语句相同,均存在n+1查询问题。
另外,一对多是可空的,即多的一端可以有一个或多个,也可以不存在。
另外,在创建critia时,已经设定了以做左连接方式join查询(JoinFragment.LEFT_OUTER_JOIN),应该来说会覆盖hbm配置文件中的设定。
问题补充:
现在的我的使用场景中,必须设置lazy=false,否则代码调整量比较大的。
问题补充:
我的问题主要有一个疑惑:从上述SQL语句中我们发现,hibernate确实已经使用了join方式查询,为什么还需要重新select呢?
相关问答
更多-
尝试这个: SELECT A.ID, A.`Name`, GROUP_CONCAT(`TAGS`.`TAG`) AS tags FROM ARTICLES A LEFT JOIN TAGS ON TAGS.ID = A.ID WHERE NOT EXISTS( SELECT 1 FROM TAGS WHERE ID = A.ID AN ...
-
HQL Hibernate很多表(HQL Hibernate many tables)[2022-07-17]
首先你的问题没有完全清除,首先在这里定义你的数据库模型,并从你的查询我已经知道 hql.append(" DOC.id, "); 这里不会添加最后一个Coma hql.append(“DOC.id”); 这里 hql.append(" FROM ").append(DocumentoAssinanteTO.class.getName()).append(" DA "); 你不需要通过调用class.getname()方法来获取类的名称,你只需要在这里调用bean或bean的名称。 你的内部联接中存在 ... -
如果我有以下DDL。 员工(男:N)到ParkingArea。 但是,约束只在链接表中保留一个Employee,因此为1:N。 - START TSQL Use OrganizationReverseDB GO SET NOCOUNT ON IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[EmployeeParkingAreaLink]') and OBJECTPROPERTY(id, N'IsUserTab ...
-
hibernate:一对多不加载所有实体但只加载一个(hibernate: one-to-many not loading all entities but only one)[2022-10-01]
您将EMP_ID定义为实体EmployeeAcctDetails的主键列。 这没有任何意义,因为相应表中有几行具有相同的EMP_ID值。 向表中添加一个真正的主键列,并将其用作主键列。 You defined EMP_ID as the primary key column of the entity EmployeeAcctDetails. This doesn't make any sense, since there are several rows in the corresponding tabl ... -
我找到了答案,似乎这只是一种解决方法...... http://en.wikibooks.org/wiki/Java_Persistence/OneToMany#Join_Table 通常最好在Java中定义ManyToOne后引用,如果您不能或不想这样做,那么您可以使用中间连接表来存储关系。 这类似于ManyToMany关系,但是如果向目标外键添加唯一约束,则可以强制它是OneToMany。 I've found an answer, and it seems it's exactly a sort of ...
-
使用MySql的GROUP_CONCAT函数: SELECT d.ID, GROUP_CONCAT(m.Field) AS ConcatFields FROM d JOIN m ON d.ID = m.dID GROUP BY d.ID Use MySql's GROUP_CONCAT function: SELECT d.ID, GROUP_CONCAT(m.Field) AS ConcatFields FROM d JOIN m ON d.ID = m.dID GROUP BY d.ID
-
Hibernate多表批量操作总是尝试创建临时表(Hibernate Multi-table Bulk Operations always try to create the temporary table)[2023-09-04]
我认为这是TemporaryTableBulkIdStrategy中的一个错误,因为当使用Oracle8iDialect时 ,不应删除临时表: @Override public boolean dropTemporaryTableAfterUse() { return false; } 但只有在删除表时才会进行此检查: protected void releaseTempTable(Queryable persister, SessionImplementor session) { if ... -
试试这个查询 String hql = "Select t1 FROM Tab1 t1 join fetch t1.tab2 t2 join fetch t2.tab3 t3"; Try this query String hql = "Select t1 FROM Tab1 t1 join fetch t1.tab2 t2 join fetch t2.tab3 t3";
-
List fields = new ArrayList(1); fields.add("tag") List contents = new ArrayList(tags.size()); for ( String tag : tags ) { contents.add(tag); } session.createCriteria(Event.class); criteria.createCriteria("eventDatas").add(Restrictions.and(Restriction ...
-
基于SQL中的一对多表关系填充对象(Populating an object based on a one-to-many table relationship in SQL)[2024-03-29]
我会使用表连接。 创建一个遍历结果的方法非常简单。 即使在查询多个小部件及其widget_nums时,也可以使用此方法 private IEnumerableMapReaderToWidget(IDataReader reader) { var dict = new Dictionary (); while (reader.Read()) { var id = (int)reader["id"]; ...