继承在hibernate中的实现,如何用criteria检索每个子类里相同的字段?

悬赏:10 发布时间:2008-07-24 提问人:blurm (初级程序员)

按道理讲子类里相同的字段应该放在父类里统一继承下来,但是已经是这样了。。我也没办法
问题:要检索出所有子类表当中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