Bod*_*den 7 java orm hibernate
我很快就会看到,我很快就会看到它.如果这个问题有一个简单的答案我很抱歉,但我对所有的术语都不太熟悉,很容易找到它.
假设我有一个基类"A"和一个子类"B",我用Hibernate映射,也许使用每个子类策略的表.基类不是抽象的.所有的B都是As,但不是所有的B都是.这反映在数据库中,表B引用表A.
好的,现在假设我有一个显示A对象列表的某种程序.用户可以选择任何A对象并进入屏幕进行修改......但是,如果A对象也是B,则屏幕将允许用户修改B而不是A.
我如何处理这个世界?
注意:我不是在询问如何确定对象是什么类.我问的是如何让hibernate返回一个正确类的对象列表.
我再次为这个问题道歉.我对hibernate的工作原理感到非常惊讶,这真的很酷.我不认为它会自动完成所有这些,我甚至不确定我想要问的是什么.当我回复评论时,我开始在脑海中改进这个问题,然后能够找到我想要的答案.感谢所有帮助过的人.
答案是:hibernate会自动执行此操作.
假设您的数据库表A中有一个主键"id",另一个表B有一个名为"a_id"的主键,它引用了表A.
所以你创建了以下类(缩写):
public class A {
private String aProperty;
// ... getter and setter, etc
{
public class B extends A {
private String bProperty;
// ... getter and setter, etc
}
Run Code Online (Sandbox Code Playgroud)
然后像这样映射它们:
<hibernate-mapping>
<class name="A" table="a" catalog="testokdelete">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="aProperty" column="a_property"/>
<joined-subclass name="B" table="b">
<key column="a_id"/>
<property name="bProperty" column="b_property"/>
</joined-subclass>
</class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)
您可以使用简单的"from A"查询返回A和B对象,如下面的代码所示:
Query query = session.createQuery("from A");
List<Object> objects = query.list();
for (Object object: objects) {
System.out.print("A property: ");
System.out.print(((A)object).getAProperty());
System.out.print(", B property: ");
System.out.println( (object.getClass() == B.class) ? ((B)object).getBProperty() : "not a B");
}
Run Code Online (Sandbox Code Playgroud)
它只是使用查询"从A"返回一个对象列表,然后遍历它们从我们的A类打印出aProperty,如果类是B类,则从我们的B类打印出bProperty.
在这种情况下,hibernate查询是自动多态的,并在适当时为您提供B对象.
| 归档时间: |
|
| 查看次数: |
2521 次 |
| 最近记录: |