java - 使用 hibernate 工具自动创建序列

标签 java hibernate sequence

我想使用 hibernate 工具(pojo 到 sql)生成序列。绝对可以正常工作。

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqid-gen")
@SequenceGenerator(name = "seqid-gen", sequenceName = "RTDS_ADSINPUT_SEQ" )
@Column(name="id")
public Long getId() {
    return id;
}

这段代码生成下面的sql

create sequence RTDS_ADSINPUT_SEQ;

问题是我想指定如下属性

INCREMENT BY,NOCACHE CYCLE

最终的 ddl 脚本应该如下所示

CREATE SEQUENCE  RTDS_ADSINPUT_SEQ  MINVALUE 1 MAXVALUE
999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE  ORDER  CYCLE ;

但据我所知,hibernate 只支持name, sequncename,allocation,initialvalue

如果我可以将这些属性作为注释包含在 pojo 中,请告诉我。

最佳答案

我在 Hibernate 源代码 (4.2.7) 中查找了它。不可能用注释指定它(无论是 JPA 还是 Hibernate)。

但是您可以提供自己的方言来实现这一点。

public class MyOwnOracleDialect extends Oracle10gDialect {

    @Override
    protected String getCreateSequenceString(final String sequenceName, final int initialValue, final int incrementSize)
        throws MappingException {
        String createSequenceString = super.getCreateSequenceString(sequenceName, initialValue, incrementSize);
        return createSequenceString + " NOCACHE ORDER CYCLE"; // modify this string as you like
    }
}

有这样一个实体

@Entity
public class MyEntity {

    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqid-gen")
    @SequenceGenerator(name = "seqid-gen", sequenceName = "RTDS_ADSINPUT_SEQ", allocationSize = 1, initialValue = 0)
    @Column(name="id")
    private Long id;

    // ...

}

您可以按照 Hibernate 文档 (http://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html/ch03.html#configuration-optional-dialects) 中的描述设置您的新方言

关于java - 使用 hibernate 工具自动创建序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15154366/

相关文章:

java - 在光线追踪中,像平面在哪里?

java - Android 上的 MVC 模式

在 R 中的参数值范围内运行 2 个参数的函数

r - 获取值运行的开始和结束索引

java - 我如何访问rest API中的http header

java - 检查用户是否存在,Java、JDBC 和 MySQL

java - 如何在 hibernate 中从数据库获取数据时限制重复

java - Hibernate EntityManagerFactory EntityManager

hibernate - Grails和第3方工具使用相同的数据库:第3方删除后如何更新grails?

python - 如何在不修改任何一个的情况下在 Python 中连接两个列表?