【发布时间】:2015-10-26 16:00:16
【问题描述】:
我有一个实体,我想在我的 sql 数据库中有几个表。
例如,我有一个 Java 类,其中我有另一个 Java 类的集合
@Entity
class SqlEntity{
@Id
@Column(unique = true)
private Date date = null;
@Column
@OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL, CascadeType.PERSIST,
CascadeType.MERGE }, mappedBy = "CollectionData")
private Collection<CollectionData> collectionData = new ArrayList<>();
@Column(name="columNameX")
int attributeX;
@Column(name="columNamey")
int attributeY;
...
}
我希望根据数据的来源在不同的表中使用不同的数据: SQL_ENTITY_GERMANY, SQL_ENTITY_USA, SQL_ENTITY_UK, ...
我能够通过为每个表编写一个xml-mapping 来实现这一点(在此之前我只有 java 注释来映射实体)。
但是我必须为每个表编写一个完整的映射,如下所示:
<hibernate-mapping>
<class name="...SqlEntity" table="SQL_ENTITY_GERMANY"
entity-name="SQL_ENTITY_GERMANY">
<id name="date" type="date" column="date">
</id>
<property name="columnNameX" column="attributeX" type="int" />
<property name="columnNameY" column="attributeY" type="int" />
...
<bag name="collectionData" cascade="all">
<key column="date" />
<one-to-many class="COLLECTION_DATA_GERMANY" />
</bag>
</class>
<class name="...collectionData" table="COLLECTION_DATA_GERMANY"
entity-name="COLLECTION_DATA_GERMANY">
<id name="id" type="long" column="id">
<generator class="native" />
</id>
<property name="columnNameX" column="attributeX" type="int" />
<property name="columnNameY" column="attributeY" type="int" />
...
<many-to-one name="collectionData" class="SQL_ENTITY_GERMANY"
fetch="select">
<column name="date" not-null="true" />
</many-to-one>
</class>
</hibernate-mapping>
因此,如果我想更改一个实体类中的任何内容(例如添加成员),我也必须在每个 xml-mapping 中更改它。
所以我认为也许可以只继承映射,这样只要我不覆盖它,类的注释仍然是有罪的。 我试图用谷歌搜索这个主题的stackoverflow,但我只找到了关于java类继承的东西。 还是有其他解决方案可以帮助我解决这个问题?
【问题讨论】:
-
你可以使用
TABLE_PER_CLASS继承映射,拥有一个抽象集合数据和多个继承 -
@javaguest 据此:docs.jboss.org/hibernate/orm/3.5/reference/en/html/… 每个类的表用于为多个实现提供一个表。但我想要一个实现的相反的几个表。还是我误解了这个概念?
-
好的,我想我现在明白你的意思了。通过使用 TABLE_PER_CLASS,我不必每次都映射 CollectionsData 的成员。好的,我会试试的。谢谢
-
使用 TABLE_PER_CLASS 我必须为每个表创建一个类,我想避免这种情况!我认为这对我没有帮助!
-
好吧,我一直在寻找,但是您的数据库未标准化这一事实使其变得困难。你有 DBA 访问权限吗?你能改变你的 sql_entity 吗?