1

我正在尝试在 Hibernate 中映射 POJO 树,以便我可以(a)简洁地将 UUID 用于任何地方的主键,以及(b)在其他不相关的表之间从外部强加类似集合的关系。使用注释这似乎很有效,但是对于我的生活,我无法让它使用 HBM XML 映射以相同的方式工作。

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

@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;
}

...十分简单。当我运行 hbm2ddl 时,它会创建表RelationshipRelationship_UniqueActivityAssociatedXML。像以下 HQL 这样的查询似乎效果很好:

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 配置(以及<hbm2hbmxml/>在 Hibernate 工具中的输出)。我想不出一个既不创建Unique涉及额外连接的额外父表,也不在会话工厂中失败并出现错误的配置:

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

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

4

1 回答 1

1

是这样的:

<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>

也可以看看:

于 2010-12-23T18:10:05.723 回答