继承在hibernate中的实现,如何用criteria检索每个子类里相同的字段?
悬赏:10 发布时间:2008-07-24 提问人:blurm (初级程序员)
按道理讲子类里相同的字段应该放在父类里统一继承下来,但是已经是这样了。。我也没办法
问题:要检索出所有子类表当中RequestMessage 字段符合条件的记录,但是现在只能检索出from条件里join的第一张表的记录
hbm文件
生成的部分sql:
select ....
from from TB_SVC_MESSAGE this_ left outer join TB_SVC_SOAP_MESSAGE this_1_ on this_.ServiceMessageID=this_1_.ServiceMessageID
left outer join TB_SVC_HTTP_MESSAGE this_2_ on this_.ServiceMessageID=this_2_.ServiceMessageID
inner join ....
where this_1_.RequestMessage like ? order by this_.MessageDateTime desc
结果是只能选出SOAPMessageVO里符合条件的记录
我现在需要所有子类里requestmessage满足条件的记录,即where this_1_.RequestMessage like ? or this_2_.RequestMessage like ?
或者说,怎么用criteria给子类重复的字段添加限制条件?
该问题已经关闭: 超过15天由系统自动关闭,悬赏平分给所有参与回答的会员
问题:要检索出所有子类表当中RequestMessage 字段符合条件的记录,但是现在只能检索出from条件里join的第一张表的记录
hbm文件
<hibernate-mapping default-lazy="false"> <class name="com.fortinet.service.platform.domain.models.service.AbstractServiceMessageVO" table="MESSAGE"> <id name="serviceMessageID" type="long" column="ServiceMessageID"> <generator class="native"/> </id> <discriminator column="messageType"/> <property name="messageDateTime" column="MessageDateTime"/> <many-to-one name="transaction" column="TransactionID" class="com.fortinet.service.platform.domain.models.TransactionVO" not-null="true"/> <many-to-one name="service" column="ServiceID" class="com.fortinet.service.platform.domain.models.ServiceVO"/> <subclass name="com.fortinet.service.platform.domain.models.service.HTTP.HTTPMessageVO" discriminator-value="HTTP_MESSAGE"> <join table="HTTP_MESSAGE"> <key column="ServiceMessageID"/> <property name="requestMessage" column="RequestMessage" type="text" /> <property name="responseMessage" column="ResponseMessage" type="text" /> </join> </subclass> <subclass name="com.fortinet.service.platform.domain.models.service.SOAP.SOAPMessageVO" discriminator-value="SOAP_MESSAGE"> <join table="SOAP_MESSAGE"> <key column="ServiceMessageID"/> <property name="requestMessage" column="RequestMessage" type="text" /> <property name="responseMessage" column="ResponseMessage" type="text" /> </join> </subclass> </class>
生成的部分sql:
select ....
from from TB_SVC_MESSAGE this_ left outer join TB_SVC_SOAP_MESSAGE this_1_ on this_.ServiceMessageID=this_1_.ServiceMessageID
left outer join TB_SVC_HTTP_MESSAGE this_2_ on this_.ServiceMessageID=this_2_.ServiceMessageID
inner join ....
where this_1_.RequestMessage like ? order by this_.MessageDateTime desc
结果是只能选出SOAPMessageVO里符合条件的记录
我现在需要所有子类里requestmessage满足条件的记录,即where this_1_.RequestMessage like ? or this_2_.RequestMessage like ?
或者说,怎么用criteria给子类重复的字段添加限制条件?
该问题已经关闭: 超过15天由系统自动关闭,悬赏平分给所有参与回答的会员
回答
你应该吧重复的字段新建一张表 才能满足3范式
visoin (中级程序员) 2008-08-08




