Java hibernate能否自动生成未标记的表?

Java hibernate能否自动生成未标记的表?,java,hibernate,postgresql,Java,Hibernate,Postgresql,当MyEntity的表不存在时,hibernate是否会生成一个CREATE unlocked TABLE语句而不是CREATE TABLE 这很有帮助: 我认为可以通过对相关Postgres方言进行子类化并覆盖getCreateTableString()方法来实现这一点,如下所示 @Entity class MyEntity { } hibernate.hbm2ddl.auto=update 显然,这是你的方言: public class CustomPostgresSQLDialect

当MyEntity的表不存在时,hibernate是否会生成一个
CREATE unlocked TABLE
语句而不是
CREATE TABLE

这很有帮助:


我认为可以通过对相关Postgres方言进行子类化并覆盖
getCreateTableString()
方法来实现这一点,如下所示

@Entity
class MyEntity {
}

hibernate.hbm2ddl.auto=update
显然,这是你的方言:

public class CustomPostgresSQLDialect extends PostgresSQLxxDialect{

    @Override
    public String getCreateTableString() {
        return "create unlogged table";
    }   
}

我认为在
@Entity
@Table
中没有参数将此类选项传递给DBMS。但在hibernate的jira中,它涵盖了您的用例,也许您想投票支持它


无论如何,您可以尝试在hibernate配置中添加一个来运行
ALTER TABLE MyEntity SET unlocked
,这是我能想到的最简单的修改DDL的方法。

那么,unlocked TABLE是什么意思呢。Hbm2dll自动更新将为您创建那些在schemaData中不存在的表。写入未标记表的数据不会写入预写日志(参见第29章),这使它们比普通表快得多。postgresql.org/docs/9.1/static/sql-createtable.htmlIt无法从hibernate执行此操作。您必须通过数据库上的ALTERSQL查询进行设置创建未标记表是什么意思????写入未标记表的数据不会写入预写日志(参见第29章),这使它们比普通表快得多。这是一个好主意。无论如何,这会迫使我所有的表都是一个未链接的表吗?(我只想定义一个特定的)。或者我可以将方言与显式实体联系起来吗?我看不出任何简单的方法。如果您查看org.hibernate.mapping.Table.sqlCreateString(..)的源代码,此时您就有了关于表/映射的信息,但显然它没有传递给上面的方法。另一个选项可能是重写org.hibernate.cfg.Configuration/AnnotationConfiguration,并对generateSchemaCreationScript(…)返回的相关字符串进行后期处理或生成chemeUpdateScript(…)
<property name="hibernate.dialect" value="org.foo.CustomPostgresSQLDialect "/>