我有一个场景如下
Class A {
String id;
List<B> lstB;
}
Class B {
String id;
String name;
}
Class C extends B {
String location;
}
对于上面的映射,这里是我的Hibernate映射
<class name="A" table="A">
<id name="id" type="java.lang.String" column="ID" length="50">
<generator class="assigned" />
</id>
<set name="lstB" table="A_B" lazy="true">
<key column="A_ID" />
<many-to-many column="B_ID" class="B" />
</set>
</class>
<class name="B" table="B">
<id name="id" type="java.lang.String" column="ID" length="50">
<generator class="assigned" />
</id>
<property name="name">
<column name="NAME"/>
</property>
<discriminator column="DISCRIMINATOR" not-null="false" />
<subclass name="C" discriminator-value="C">
<property name="location">
<column name="LOCATION"/>
</property>
</subclass>
</class>
现在我想根据以下给定的参数检索B
和C
对象的列表。
1)来自A
的ID。
2)来自C
的位置。
现在,如果结果对象是B
的实例,那么只需添加列表,但如果它是C
的实例,则必须验证在where子句中传递的位置名称。
我可以使用HQL实现这一目标吗?或者我必须使用Criteria API?我们可以从HQL本身检查对象的实例吗?