- 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/