有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用Hibernate Envers(@Audited)而不使用Hibernate生成任何表

我们不允许Hibernate创建(重新创建)表。我们使用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

}

开始时,我设置了另一个DB模式并使用

<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,并尝试在另一个模式上运行,但行

参考“巴西存托凭证”。“REVINFO”(“REV”)启用

造成问题的原因是

REVINFO

根本不存在。我看到的大多数例子都只讨论AUD表,而不是REVINFO。这是否意味着还有另一个名为REVINFO的表,它保存时间戳和修订id?我找不到这张桌子的结构

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

谢谢!


共 (1) 个答案

  1. # 1 楼答案

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

      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表