@Entity
class MyEntity {
}
hibernate.hbm2ddl.auto=update
當MyEntity
的表不存在時,hibernate是否可能生成CREATE unlogged TABLE
語句而不是CREATE TABLE
?休眠可以自動生成一個未記錄的表嗎?
@Entity
class MyEntity {
}
hibernate.hbm2ddl.auto=update
當MyEntity
的表不存在時,hibernate是否可能生成CREATE unlogged TABLE
語句而不是CREATE TABLE
?休眠可以自動生成一個未記錄的表嗎?
抱歉,我當然要寫'update'。 – membersound
那麼你的意思是未記錄的表格。 Hbm2dll自動更新將爲您創建那些在模式中不存在的表 – Nimesh
寫入未記錄表的數據不會寫入預寫日誌(請參閱第29章),這使得它們比普通錶快得多。 \t postgresql.org/docs/9.1/static/sql-createtable.html – membersound
我想你可以通過繼承相關的Postgres方言和重寫getCreateTableString()
方法如下做到這一點。
public class CustomPostgresSQLDialect extends PostgresSQLxxDialect{
@Override
public String getCreateTableString() {
return "create unlogged table";
}
}
很顯然它設置爲你的方言:
<property name="hibernate.dialect" value="org.foo.CustomPostgresSQLDialect "/>
這是一個好主意。無論如何,這將迫使我所有的表都成爲一個不記錄的表? (我只想定義一個具體的)。或者我可以將方言與明確的實體聯繫起來嗎? – membersound
我沒有看到任何簡單的方法。如果你看看org.hibernate.mapping.Table.sqlCreateString(..)的來源,那麼你在這一點上有關於表/映射的信息,但顯然它不會被傳遞給上面的方法。 –
另一個選項可能是重寫org.hibernate.cfg.Configuration/AnnotationConfiguration並後處理由generateSchemaCreationScript(...)或generateSchemeUpdateScript(...)返回的相關字符串。 –
我覺得有一個在@Entity
或@Table
沒有參數去傳遞一種選項的DBMS。在hibernate的jira中發現了this feature request,它涵蓋了你的用例,也許你想爲它投票。
無論如何,你可以嘗試在hibernate配置中添加一個auxiliary database object來運行ALTER TABLE MyEntity SET UNLOGGED
,這是我可以考慮做DDL修改的最簡單方法。
你是什麼意思由CREATE unlogged TABLE ???? – Dev
http://www.postgresql.org/docs/9.1/static/sql-createtable.html寫入未記錄表的數據不會寫入預寫日誌(請參閱第29章),這使得它們比普通錶快得多。 – membersound
相關http://stackoverflow.com/questions/7938610/how-to-apply-postgresql-9-1-unlogged-feature-to-an-existing-table – isalgueiro