java - 无法完成架构更新 Envers + Firebird

标签 java hibernate firebird

  • hibernate 核心4.3.7
  • hibernate-jpa-2.1-api
  • hibernate-envers 4.3.11
  • Firebird 2.5.5

我正在尝试使用 Envers,但遇到了麻烦: 无法完成架构更新:org.hibernate.MappingException:org.hibernate.dialect.FirebirdDialect 不支持池序列

@Entity
@Table(name = "BOOKS")
@SequenceGenerator(name = "GEN_BOOKS", sequenceName = "GEN_BOOKS", allocationSize = 1)
@Audited
public class BOOK implements Serializable , Comparable<BOOK> {
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "GEN_BOOKS")
    private Integer id;
    private String title;

}

最佳答案

如果您对这些行进行评论,Hibernate 可以生成您的表:

//@SequenceGenerator(name = "GEN_BOOKS", sequenceName = "GEN_BOOKS", allocationSize = 1)
//@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "GEN_BOOKS")

持久化所必需的:

<property name="hibernate.hbm2ddl.auto" value="create"/>

启动服务器并创建表。

那么现在需要手动创建Trigguer和Generator

CREATE GENERATOR GEN_BOOKS;
SET GENERATOR GEN_BOOKS TO 1;

CREATE TRIGGER TR_BOOKS_ID FOR BOOKS
ACTIVE BEFORE INSERT POSITION 0
AS
  BEGIN
    IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(GEN_BOOKS , 1);
   END ;

COMMIT WORK;

删除持久性:

<property name="hibernate.hbm2ddl.auto" value="create"/>

删除评论

//@SequenceGenerator(name = "GEN_BOOKS", sequenceName = "GEN_BOOKS", allocationSize = 1)
//@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "GEN_BOOKS")

您可以手动创建表

注解@AuditedTable(value = "BOOKS_LOG")

CREATE TABLE BOOKS_AUD(
  ID INTEGER NOT NULL,         
  REV     INTEGER NOT NULL,    <-- IMPORTANT
  REVTYPE SMALLINT,            <-- IMPORTANT
  TITLE VARCHAR(45)

);

发生器和触发器

   CREATE REVINFO (     
        ID integer not null, 
        REV integer not null, 
        REVTYPE smallint, 
        TITLE varchar(45) 
    );

    ALTER TABLE REVINFO ADD
    PRIMARY KEY (ID ,REV);

发生器和触发器

关于java - 无法完成架构更新 Envers + Firebird,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37168665/

相关文章:

boolean - 为什么我们在 Firebird 中没有 boolean 数据类型?

java - 尝试在 Eclipse 中使用 selenium jar 文件启动 Firefox 浏览器

java - hibernate 与 ltree native 命名查询

mysql - 在 spring mvc 的 hibernate 注释中选择查询

mysql - 使用 `.createSQLQuery` 截断后 spring/hibernate 不会回滚事务

Delphi 32 位应用程序无法找到由 Windows 7 中的 Wow64 中的 32 位安装程序编写的注册表项

windows - 查看是否是 native

java - StringJoiner 从每行的第一个位置删除定界符

java - 使用数据库开发 Java 应用程序

java - 如何在使用 dbunit 插入 HSQLDB 期间排除列