我有一個實體,應該根據表示表名的一些字符串屬性動態地持久化到不同的表。 Hibernate的動態模型看起來就像我想要的,但我找不到如何設置表名:)任何人都可以告訴我我失蹤了什麼?提前致謝。休眠:動態設置表名
P.S.另一個發現解決方案是http://java.dzone.com/articles/hibernate-dynamic-table-routin。但我不喜歡它,因爲它看起來像骯髒的黑客。如果我將多個查詢部分命名爲要替換的子字符串,該怎麼辦?
我有一個實體,應該根據表示表名的一些字符串屬性動態地持久化到不同的表。 Hibernate的動態模型看起來就像我想要的,但我找不到如何設置表名:)任何人都可以告訴我我失蹤了什麼?提前致謝。休眠:動態設置表名
P.S.另一個發現解決方案是http://java.dzone.com/articles/hibernate-dynamic-table-routin。但我不喜歡它,因爲它看起來像骯髒的黑客。如果我將多個查詢部分命名爲要替換的子字符串,該怎麼辦?
如果您使用JPA then
您可以@PrePersist
。
如果使用純Hibernate
然後看看event。
不知道它是否適合你。
它看起來像一個NamingStrategy
教程是你需要的。
@Override
public String classToTableName(String className) {
// your code super.classToTableName()
}
org.hibernate.cfg.NamingStrategy interface.
的Hibernate 3.6都有這個接口的四種實現:
org.hibernate.cfg.DefaultComponentSafeNamingStrategy
org.hibernate.cfg.DefaultNamingStrategy
org.hibernate.cfg.EJB3NamingStrategy
org.hibernate.cfg.ImprovedNamingStrategy
實現您的代碼返回表名。
嗯我也發現這種方法。問題是如何使用類名來確定表名,如果我的類名始終相同。可能的解決方案是將表名保存到數據庫然後進行檢索。但我需要同時保存/回收實體,並且我不想通過同步化來降低我的性能。有任何想法嗎?謝謝! –
試過。該解決方案對我無效,因爲NamingStrategy實現僅在Hibernate初始化期間被調用。目前我正在使用我主帖中提到的dirtyhack解決方案,但實際上我不喜歡它,仍然在尋找另一個解決方案。 –
這更像是一個模式設計問題,那些具有相似定義和唯一名稱的表由於某些屬性而不同,爲什麼不將該屬性添加到表模式中並將所有這些表合併爲一個?那麼你只需要將這個字段添加到where子句中。
這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 – honk
我嘗試了很多辦法,只有它是最簡單的:
Session session = super.getSession();
SQLQuery query = session.createSQLQuery("raw sql");
query.setParameter(":abc", "value");
query.addEntity(Some.class);
return query.list();
整個實體必須去另一個表,或者只是一個子集? – ssedano
有一個POJO。例如。班級人員。我想從多個表中保存和檢索這個類的實例。例如。來自BAD_PERSONS_TABLE,GOOD_PERSONS_TABLE。表格具有相同的結構。有100多個這樣的表格是在運行時動態創建的。根據我們的數據庫設計和性能預測,這是最好的方法。不要試圖強迫我切換到另一個))謝謝! –
你在使用JPA嗎? – ssedano