首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用XML在Hibernate中映射这种多态性,而不创建额外的父表?

如何使用XML在Hibernate中映射这种多态性,而不创建额外的父表?
EN

Stack Overflow用户
提问于 2010-12-23 17:18:03
回答 1查看 799关注 0票数 1

我试图在Hibernate中映射一棵POJO树,以便(a)简洁地将UUID用于任何地方的主键,(b)在其他不相关的表之间建立类似集合的关系。使用注释似乎工作得很好,但对于我来说,使用HBM映射无法让它以同样的方式工作。

例如,给定以下(缩写)类:

代码语言:javascript
复制
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Unique {
    private String uuid;
}

@Entity
public class Relationship extends Unique {
    @OneToMany
    private Set<Unique> members;
}

@Entity
public class Activity extends Unique {
    private String name;
}

@Entity
public class AssociatedXML extends Unique {
    @Lob
    private String xml;
}

...easy农民。当我运行hbm2ddl时,它会创建表RelationshipRelationship_UniqueActivityAssociatedXML。像下面的HQL这样的查询似乎很有效:

代码语言:javascript
复制
session.createQuery("select xml "
    + "from AssociatedXML as xml, Relationship as rel "
    + "left join rel.members as m "
    + "where m.uuid = :uuid").setString("uuid", activity.getUuid());

同时,我正在尝试转到XML配置。POJO是从XML模式生成的。由于源代码是生成的,我试图避免手工编辑它来添加注释。

我已经尝试了所有我能想到的XML配置(以及在Hibernate工具中愚弄<hbm2hbmxml/>的输出)。我无法提出一个配置,它既不能创建包含额外联接的额外Unique父表,也不能在会话工厂中失败,从而导致错误:

关联引用未映射的类:唯一

有人对我的XML配置文件应该是什么样子有什么建议吗?还是我要走一条不好的路?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-23 18:10:05

就像这样:

代码语言:javascript
复制
<class name="Unique" abstract = "true">
    <id name="uuid" />

    <union-subclass name="Relationship">
        <set name="members" table = "Relationship_Unique" >
            <key />
            <many-to-many class = "Unique" unique="true"/>
        </set>
    </union-subclass>

    <union-subclass name="Activity">
        <property name = "name" />
    </union-subclass>

    <union-subclass name="AssociaXML">
        <property name = "xml" />
    </union-subclass>
</class>

还请参见:

  • 8.3.1.一对多
  • 10.1.5.每个混凝土级表
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4520988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档