最終目標:
有幾個java對象共享同一個基類持續到數據庫中,同時具有與所有擁有/繼承的對象其自身包含的表中的每一個,並通過數據庫ID簡單自動生成。冬眠簡單的繼承 - 或 - XML屬性導入/包括
非常簡單的要求。不可能(?)與Hibernate!
到目前爲止我什麼(使用MySQL,Hibernate XML映射):
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>
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;
}
}
User.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>
項目,從而實現繼承(重新使用屬性)。可能?怎麼做?!?進一步探索註釋,據我所見,他們不支持這種簡單的繼承要求。
轉儲休眠和去與另一個ORM解決方案。
請不要鏈接到文檔 - 我在閱讀了幾次後放棄了這個文檔!
屬性導入的示例(來自外部文件)會很好。
感謝上帝保佑!
一直工作在註釋選項,並發現你寫它。幸運的是,我從Hibernate中抽出了幾秒鐘。無論如何 - 謝謝! – Poni