两个两映射文件:<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="com.creditms.msg.entity.po">
<class name="TSendplat" table="T_SEND_PLAT">
<id name="id" type="java.lang.Long">
<column name="ID" precision="9" scale="0" />
<generator class="sequence">
<param name="sequence">SQ_CM_SENDPLAT</param>
</generator>
</id>
<property name="SNumber" type="java.lang.String">
<column name="S_NUMBER" length="100" />
</property>
<property name="fromOrg" type="java.lang.String" length="100">
<column name="FROM_ORG" />
</property>
<property name="surrenderOrg" type="java.lang.String" length="100">
<column name="SURRENDER_ORG" />
</property>
<property name="surrenderName" type="java.lang.String" length="100">
<column name="SURRENDER_NAME" />
</property>
<property name="sendDate" type="java.util.Date" length="100">
<column name="SEND_DATE" />
</property>
<property name="fromOrgName" type="java.lang.String" length="100">
<column name="FROM_ORG_NAME" />
</property>
<property name="title" type="java.lang.String" length="100">
<column name="TITLE" />
</property>
<property name="status" type="java.lang.String" length="1">
<column name="STATUS" />
</property>
<property name="surrenderNumber" type="java.lang.String" length="100">
<column name="SURRENDER_NUMBER" />
</property>
<property name="surrenderContent" type="java.lang.String" length="400">
<column name="SURRENDER_CONTENT" />
</property>
<set name="TSendplatDetails" inverse="false" cascade="all">
<key>
<column name="S_ID" precision="9" scale="0" not-null="true" />
</key>
<one-to-many class="TSendDetail" />
</set>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="com.creditms.msg.entity.po">
<class name="TSendDetail" table="T_SEND_DETAIL">
<id name="id" type="java.lang.Long">
<column name="ID" precision="9" scale="0" />
<generator class="sequence">
<param name="sequence">SQ_CM_SENDPLATDETAIL</param>
</generator>
</id>
<many-to-one name="TSendplat" class="TSendplat" fetch="select">
<column name="S_ID" precision="9" scale="0" not-null="true" />
</many-to-one>
<property name="toOrg" type="java.lang.String" length="100">
<column name="TO_ORG" />
</property>
<property name="toOrgName" type="java.lang.String" length="100">
<column name="TO_ORG_NAME" />
</property>
<property name="isRead" type="java.lang.String" length="1">
<column name="IS_READ" />
</property>
<property name="re" type="java.lang.String" length="1000">
<column name="REMARK" />
</property>
<property name="readDate" type="java.util.Date">
<column name="READ_DATE" />
</property>
</class>
</hibernate-mapping>使用的HQL语句为:
from TSendplat po where po.status='2' and po.TSendplatDetails.toOrg='188' order by po.TSendplatDetails.isRead desc最后翻译的时候变成了:
select * from ( select tsendplat0_.ID as ID30_, tsendplat0_.S_NUMBER as S2_30_, tsendplat0_.FROM_ORG as FROM3_30_, tsendplat0_.SURRENDER_ORG as SURRENDER4_30_, tsendplat0_.SURRENDER_NAME as SURRENDER5_30_, tsendplat0_.SEND_DATE as SEND6_30_, tsendplat0_.FROM_ORG_NAME as FROM7_30_, tsendplat0_.TITLE as TITLE30_, tsendplat0_.STATUS as STATUS30_, tsendplat0_.SURRENDER_NUMBER as SURRENDER10_30_, tsendplat0_.SURRENDER_CONTENT as SURRENDER11_30_ from T_SEND_PLAT tsendplat0_, T_SEND_DETAIL tsendplatd1_, T_SEND_DETAIL tsendplatd2_ where tsendplat0_.ID=tsendplatd2_.S_ID and tsendplat0_.ID=tsendplatd1_.S_ID and tsendplat0_.STATUS='2' and tsendplatd1_.TO_ORG='188' order by tsendplatd2_.IS_READ desc ) where rownum <= ?
不什么为什么会有两个子类的关联啊?from T_SEND_PLAT tsendplat0_, T_SEND_DETAIL tsendplatd1_, T_SEND_DETAIL tsendplatd2_
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="com.creditms.msg.entity.po">
<class name="TSendplat" table="T_SEND_PLAT">
<id name="id" type="java.lang.Long">
<column name="ID" precision="9" scale="0" />
<generator class="sequence">
<param name="sequence">SQ_CM_SENDPLAT</param>
</generator>
</id>
<property name="SNumber" type="java.lang.String">
<column name="S_NUMBER" length="100" />
</property>
<property name="fromOrg" type="java.lang.String" length="100">
<column name="FROM_ORG" />
</property>
<property name="surrenderOrg" type="java.lang.String" length="100">
<column name="SURRENDER_ORG" />
</property>
<property name="surrenderName" type="java.lang.String" length="100">
<column name="SURRENDER_NAME" />
</property>
<property name="sendDate" type="java.util.Date" length="100">
<column name="SEND_DATE" />
</property>
<property name="fromOrgName" type="java.lang.String" length="100">
<column name="FROM_ORG_NAME" />
</property>
<property name="title" type="java.lang.String" length="100">
<column name="TITLE" />
</property>
<property name="status" type="java.lang.String" length="1">
<column name="STATUS" />
</property>
<property name="surrenderNumber" type="java.lang.String" length="100">
<column name="SURRENDER_NUMBER" />
</property>
<property name="surrenderContent" type="java.lang.String" length="400">
<column name="SURRENDER_CONTENT" />
</property>
<set name="TSendplatDetails" inverse="false" cascade="all">
<key>
<column name="S_ID" precision="9" scale="0" not-null="true" />
</key>
<one-to-many class="TSendDetail" />
</set>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="com.creditms.msg.entity.po">
<class name="TSendDetail" table="T_SEND_DETAIL">
<id name="id" type="java.lang.Long">
<column name="ID" precision="9" scale="0" />
<generator class="sequence">
<param name="sequence">SQ_CM_SENDPLATDETAIL</param>
</generator>
</id>
<many-to-one name="TSendplat" class="TSendplat" fetch="select">
<column name="S_ID" precision="9" scale="0" not-null="true" />
</many-to-one>
<property name="toOrg" type="java.lang.String" length="100">
<column name="TO_ORG" />
</property>
<property name="toOrgName" type="java.lang.String" length="100">
<column name="TO_ORG_NAME" />
</property>
<property name="isRead" type="java.lang.String" length="1">
<column name="IS_READ" />
</property>
<property name="re" type="java.lang.String" length="1000">
<column name="REMARK" />
</property>
<property name="readDate" type="java.util.Date">
<column name="READ_DATE" />
</property>
</class>
</hibernate-mapping>使用的HQL语句为:
from TSendplat po where po.status='2' and po.TSendplatDetails.toOrg='188' order by po.TSendplatDetails.isRead desc最后翻译的时候变成了:
select * from ( select tsendplat0_.ID as ID30_, tsendplat0_.S_NUMBER as S2_30_, tsendplat0_.FROM_ORG as FROM3_30_, tsendplat0_.SURRENDER_ORG as SURRENDER4_30_, tsendplat0_.SURRENDER_NAME as SURRENDER5_30_, tsendplat0_.SEND_DATE as SEND6_30_, tsendplat0_.FROM_ORG_NAME as FROM7_30_, tsendplat0_.TITLE as TITLE30_, tsendplat0_.STATUS as STATUS30_, tsendplat0_.SURRENDER_NUMBER as SURRENDER10_30_, tsendplat0_.SURRENDER_CONTENT as SURRENDER11_30_ from T_SEND_PLAT tsendplat0_, T_SEND_DETAIL tsendplatd1_, T_SEND_DETAIL tsendplatd2_ where tsendplat0_.ID=tsendplatd2_.S_ID and tsendplat0_.ID=tsendplatd1_.S_ID and tsendplat0_.STATUS='2' and tsendplatd1_.TO_ORG='188' order by tsendplatd2_.IS_READ desc ) where rownum <= ?
不什么为什么会有两个子类的关联啊?from T_SEND_PLAT tsendplat0_, T_SEND_DETAIL tsendplatd1_, T_SEND_DETAIL tsendplatd2_
解决方案 »
- streams type cannot be used in batching
- jdbc获取的resultset怎么生成指定rootid的树
- 谁知道动态数据收集系统的解决方案
- JSP中getAttribute的一个奇怪问题!
- 我想在同一台服务器上运行Tomcat 5.0和iis 请问如何配置?
- 去一家公司大面试(深圳港航网络系统有限公司),深圳的朋友有知道的进来看看,在线等待,下午结帐
- 装了JB9,新建文件后,web中怎么只有applet这一项可用,其它项都不能用是怎么回事?
- 如何将一个字符串变量转变成一个符点型数据变量,谢谢
- 请问这是什么错误?
- 问一个幼稚的问题:jsp能象asp那样不建立odbc数据源却可以连接access数据库吗?
- 急急急!! ie7如何跟兼容模式下的ie8区别开来??
- dwr 调用struts的action 的 execute 方法
hibernate解析的问题吧,先查询TSendplat ,然后在解析where里的条件的时候把TSendplatDetails解析成子查询了一般都是这么用from TSendplat po, IN(po.TSendplatDetails) poi where ......
或者用join fetch
<column name="S_ID" precision="9" scale="0" not-null="true" />
</many-to-one>
多对一关系``
现在还有个问题,我只想要集合里满足条件的.
怎么样做到我访问这个集合的时候只有满足条件的子记录,会不会有点导想天开了呀?估计也不行
能不能改一下呢?我应该如何去写这个SQL呢?就只要主要信息和符合条件的子表记录(where toOrg='188' )select po,po.TSendplat from xxx吗?有什么办法可以得到的结果少一些(集合里的记录);
结果是Object[]也可以.
select po, poi from TSendplat po, IN(po.TSendplatDetails) poi where where poi.toOrg='188'
返回结果中存放一堆Object[] ,0是po 1是poi
我再用一个order by op.TSendplatDetails.id
它关联的时候又多出了一个了.郁闷啊
这样我试了一下,不行啊.是不是还要改造一下啊.