Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate简单继承或xml属性导入/包含_Java_Xml_Hibernate_Orm_Hbmxml - Fatal编程技术网

Java hibernate简单继承或xml属性导入/包含

Java hibernate简单继承或xml属性导入/包含,java,xml,hibernate,orm,hbmxml,Java,Xml,Hibernate,Orm,Hbmxml,最终目标: 将几个共享相同基类的java对象持久化到数据库中,而每个对象都有自己的包含所有自有/继承对象的自包含表,以及由数据库id自动生成的简单表 非常简单的要求。冬眠是不可能的 到目前为止(使用MySQL、HibernateXML映射): map.hbm.xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//

最终目标:
将几个共享相同基类的java对象持久化到数据库中,而每个对象都有自己的包含所有自有/继承对象的自包含表,以及由数据库id自动生成的简单表

非常简单的要求。冬眠是不可能的

到目前为止(使用MySQL、HibernateXML映射):

map.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping default-access="field"
    default-lazy="false">

    <class name="xyz.url.hibernate.EntityBase" abstract="true">
        <id name="m_id" column="id">
            <generator class="identity" />
        </id>

        <version name="m_version" column="version" type="long" />

        <union-subclass name="xyz.url.hibernate.User" table="my_entity">
            <property name="name" column="name" type="string" />
        </union-subclass>
    </class>

</hibernate-mapping>
User.java

public class User extends EntityBase {
    public String   name;
}
除非您将
生成器
类更改为
增量

,否则上述操作不起作用 目前这是给定的错误:

org.hibernate.MappingException: Cannot use identity column key generation with <union-subclass> mapping for: xyz.url.hibernate.User
org.hibernate.MappingException:无法将标识列键生成与以下映射一起使用:xyz.url.hibernate.User
那么,为什么Hibernate假设我需要在程序范围内使用一个唯一的ID(我已经阅读了一些JPA要求)。。。真糟糕

无论如何,我坚持要有一个简单的表(每个对象)来聚合所有对象的(
User
,在这种情况下)属性,并拒绝使用鉴别器(这又是一个垃圾…),这只会使最终的SQL查询复杂化并影响性能

我在这里看到的唯一解决方案是:

  • 手动映射XML中一个块中的所有属性

  • 映射所有属性,同时从外部文件“导入”某些
    项,从而实现继承(重用属性)。可能的怎么办

  • 进一步探索注释,据我所知,它们不支持简单的继承要求

  • 转储Hibernate并使用另一个ORM解决方案

  • 请不要链接到文档-我在读了几遍之后就放弃了
    举一个属性导入(从外部文件)的例子就好了


    谢谢,上帝保佑

    首先,您需要决定是否应将继承关系映射到数据库(以允许多态查询,如EntityBase的
    、多态关系等)

    据我所知,在您的案例中,它不应该被映射,因此使用继承映射选项(如
    )根本没有意义。现在您有以下选项:

    二,。Hibernate不支持重用XML映射,但其文档建议在本例中使用XML实体,例如,请参阅

    三,。注释当然以注释的形式支持这一要求。
    此注释可用于标记未映射到数据库本身的类,但在其属性上定义的任何映射注释都会对其映射的子类生效,因此您无需重复它们。

    首先,您需要决定是否应将继承关系映射到数据库(允许多态查询,如EntityBase中的
    、多态关系等)或不允许

    据我所知,在您的情况下,它不应该被映射,因此使用继承映射选项(如
    )毫无意义。现在您有以下选项:

    2.Hibernate不支持重用XML映射,但其文档建议在本例中使用XML实体,例如,请参阅

    3.注释当然以注释的形式支持这一要求。
    此注释可用于标记未映射到数据库本身的类,但其属性上定义的任何映射注释对其映射的子类生效,因此您无需重复它们。

    您也可以使用XML实体引用,请参阅:


    您也可以使用XML实体引用,请参见:


    一直在处理注释选项,并在您编写之前找到了它。幸运的是,我几秒钟后就从Hibernate中退出了。无论如何-谢谢!一直在处理注释选项,并在您编写之前找到了它。幸运的是,我几秒钟后就从Hibernate中退出了。无论如何-谢谢!
    org.hibernate.MappingException: Cannot use identity column key generation with <union-subclass> mapping for: xyz.url.hibernate.User