最终目标:
让一些共享相同基类的 java 对象持久化到数据库中,而每个对象都有自己的自包含表,其中包含所有自己/继承的对象,以及由数据库 id 自动生成的简单对象。
很简单的要求。不可能(?)与休眠!
到目前为止我所拥有的(使用 MySQL,Hibernate XML 映射):
地图.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>
EntityBase.java
public abstract class EntityBase {
private final long m_id;
private final long m_version;
public EntityBase() {
this.m_id = 0;
this.m_version = 0;
}
public long get_id() {
return this.m_id;
}
public long get_version() {
return this.m_version;
}
}
用户.java
public class User extends EntityBase {
public String name;
}
除非您将generator
类更改为increment
.
目前这是给定的错误:
org.hibernate.MappingException: Cannot use identity column key generation with <union-subclass> mapping for: xyz.url.hibernate.User
好吧,为什么 Hibernate 假设我想要一个程序范围内的唯一 ID(我已经阅读了一些 JPA 要求)......真是个废话!
无论如何,我坚持有一个简单的表(每个对象)来聚合所有对象的(User
在这种情况下)属性,并拒绝使用只会使最终 SQL 查询复杂化并影响性能的鉴别器(又是什么废话……)。
我在这里看到的唯一解决方案:
在 XML 内的一个块中手动映射所有属性。
<propert>
映射所有属性,同时从外部文件“导入”一些项目,从而实现继承(属性的重用)。可能的?怎么做?!?进一步探索注释,据我所知,它们不支持简单的继承要求。
转储 Hibernate 并使用另一个 ORM 解决方案。
请不要链接到文档 - 在阅读了几次之后我放弃了那个文档!
一个属性导入的例子(从外部文件)会很棒。
感谢上帝保佑!