2016-05-11 55 views
0
  • 休眠核心4.3.7
  • 冬眠,JPA-2.1-API
  • 休眠-envers 4.3.11
  • 火鳥2.5.5

我在嘗試使用Envers,但我遇到了麻煩: 無法完成模式更新:org.hibernate.MappingException:org.hibernate.dialect.FirebirdDialect不支持合併的序列無法完成架構更新Envers +火鳥

@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; 

} 

回答

1

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和發電機

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) 

); 

發生器和TRIGGER

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

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

發生器和TRIGGER

+0

它爲我工作,謝謝! – ffSouza