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查询复杂化并影响性能
我在这里看到的唯一解决方案是:
项,从而实现继承(重用属性)。可能的怎么办举一个属性导入(从外部文件)的例子就好了
谢谢,上帝保佑 首先,您需要决定是否应将继承关系映射到数据库(以允许多态查询,如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