我有一个实体,我希望在我的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
中更改它。
所以我认为可能只是继承映射,所以只要我不覆盖它,类的注释仍然有罪。 我试图google并在stackoverflow上搜索这个主题,但我发现只有java类继承的东西。 还是有其他解决方案可以帮助我解决这个问题吗?
答案 0 :(得分:0)
由于您的数据库是非规范化的,实现所需内容的唯一方法是创建一个抽象类和几个具有适当国家/地区代码的具体子类。
如果您能够更改架构,我建议您在COUNTRY_CODE VARCHAR(2) NULL
表中添加一列SQL_ENTITY
,插入SQL_ENTITY_*
表中的所有数据。
您可以通过以下方式实现:
1)创建一个新的SQL_ENTITY
表
CREATE TABLE NEW_SQL_ENTITY (
id_entity INTEGER NOT NULL AUTO_INCREMENT;
value1 VARCHAR(100) NOT NULL;
value2 VARCHAR(100) NOT NULL;
country_code VARCHAR(2) NULL;
)
2)插入其他表中的数据:
INSERT INTO NEW_SQL_ENTITY (value1,value2,country_code) VALUES
(SELECT value1,value2, 'UK' from SQL_ENTITY_UK)
3)重复所有SQL_ENTITY
表