【问题标题】:How to use Hibernate Envers (@Audited) without Hibernate generating any tables如何在 Hibernate 不生成任何表的情况下使用 Hibernate Envers (@Audited)
【发布时间】:2016-01-23 08:52:35
【问题描述】:

我们有一种情况,我们不允许 Hibernate 创建(重新创建)表。我们使用带有 Spring 的 Hibernate 4.x。

我们希望通过运行我们自己的带有“AUD”扩展名的 Oracle sql 脚本来手动创建表。

为简单起见,我有以下课程。

@Entity
@Table(name = "ENVERS_TEST")
public class EnversTest {

    @Id
    @Column(name = "ENV_ID")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ENVERS_TEST_SEQ")
    @SequenceGenerator(name = "ENVERS_TEST_SEQ", sequenceName = "ENVERS_TEST_SEQ", allocationSize = 1)

    private Integer envId;

    @Audited
    @Column(name = "CREATED_BY")
    private String createdBy;

    @Audited
    @Column(name = "UPDATED_DATE")
    private Date updatedDate;


    @NotAudited
    @Column(name = "DESCR")
    private String description;

    //getters and setters

}

一开始,我设置了另一个数据库模式并使用了

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

发现自动生成了如下sql。

  CREATE TABLE "BDR"."ENVERS_TEST_AUD" 
   (    "ID" NUMBER(10,0) NOT NULL ENABLE, 
"REV" NUMBER(10,0) NOT NULL ENABLE, 
"REVTYPE" NUMBER(3,0), 
"CREATED_BY" VARCHAR2(255 CHAR), 
"UPDATED_DATE" TIMESTAMP (6), 
PRIMARY KEY ("ID", "REV")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 
  TABLESPACE "DBA_DATA1_TS"  ENABLE, 
CONSTRAINT "FK_4637U2YFKSOKDFIXCWWL37ANH" FOREIGN KEY ("REV")
 REFERENCES "BDR"."REVINFO" ("REV") ENABLE
   ) SEGMENT CREATION DEFERRED 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  TABLESPACE "DBA_DATA1_TS" ;

所以我复制了这个 SQL 并尝试在另一个模式上运行,但行

引用 "BDR"."REVINFO" ("REV") 启用

导致问题是因为

REVINFO

不存在。我看到的大多数示例只讨论 AUD 表,而不是 REVINFO。这是否意味着还有另一个名为REVINFO 的表包含时间戳和修订ID?我找不到这个表的结构。

请告诉我如何手动创建此表。它的结构是什么?

谢谢!

【问题讨论】:

    标签: java spring oracle hibernate hibernate-envers


    【解决方案1】:

    我终于能够创建另一个模式来测试并找到 REVINFO 表的 sql 语句。您应该在运行 sql 之前运行此 sql 以创建基类和 AUD 表。在这里!!

      CREATE TABLE "REVINFO" 
       (    "REV" NUMBER(10,0) NOT NULL ENABLE, 
    "REVTSTMP" NUMBER(19,0), 
    PRIMARY KEY ("REV")
      USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 
      TABLESPACE "DBA_DATA1_TS"  ENABLE
       ) SEGMENT CREATION DEFERRED 
      PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
     NOCOMPRESS LOGGING
      TABLESPACE "DBA_DATA1_TS" ;
    

    问题在于我浏览的大多数文档和教程只讨论了 _AUD 表而不是 REVINFO 表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-08
      • 2016-03-21
      • 2021-10-07
      • 2011-12-07
      • 2015-08-20
      • 2019-01-27
      • 2016-03-19
      • 2012-09-30
      相关资源
      最近更新 更多