any元素可以把pojo的一个属性根据一个类型字段映射分别成不同的类。我的项目原来是Oracle数据库,现在换成sqlserver。对any元素的字段的查询总是报错。我看到生成的Sql语句类似于。(prop_type,prop_id) in ((?,?)).我把sql语句在oracle就可正常执行。想来应该SqlServer不支持这种语法。我换了种方法即可正常查询。
例如,hbm.xml配置
<any name="object" meta-type="character" id-type="long" cascade="all">
<meta-value value="O" class="One"/>
<meta-value value="M" class="Many"/>
<column name="clazz" length="100"/>
<column name="gen_id"/>
</any>
查询语句可以写为
session.find(
"from Bar bar where bar.object.id = ? and bar.object.class = ?",
new Object[] { oid, new Character('O') },
new Type[] { Hibernate.LONG, Hibernate.CHARACTER }
oid 是one类的主键字段。这里object的类型为One。因为type=o(字母o).
object.id 表示引用对象的主键,
object.class 表示引用对象的类型meta-value 的value值
这样就可以进行正常查询了。