如何在 Hibernate 不生成任何表的情况下使用 Hibernate Envers (@Audited)
How to use Hibernate Envers (@Audited) without Hibernate generating any tables
我们有一种情况不允许 Hibernate 创建(重新创建)tables。我们使用 Hibernate 4.x 和 Spring.
我们想通过 运行 自己的带有 "AUD" 扩展名的 Oracle sql 脚本手动创建 table。
为简单起见,我有以下 class。
@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
不存在。我看到的大多数例子只谈论澳元 table 而不是 REVINFO
。这是否意味着还有另一个名为 REVINFO
的 table 包含时间戳和修订 ID?我找不到这个 table.
的结构
请告诉我如何手动创建此 table。它的结构是什么?
谢谢!
我终于能够创建另一个模式来测试并找到 REVINFO table sql 语句。您应该 运行 这个 sql 在 运行 宁 sql 之前创建基础 class 和澳元 table。在这里!!
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 table 而不是 REVINFO table。
我们有一种情况不允许 Hibernate 创建(重新创建)tables。我们使用 Hibernate 4.x 和 Spring.
我们想通过 运行 自己的带有 "AUD" 扩展名的 Oracle sql 脚本手动创建 table。
为简单起见,我有以下 class。
@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
不存在。我看到的大多数例子只谈论澳元 table 而不是 REVINFO
。这是否意味着还有另一个名为 REVINFO
的 table 包含时间戳和修订 ID?我找不到这个 table.
请告诉我如何手动创建此 table。它的结构是什么?
谢谢!
我终于能够创建另一个模式来测试并找到 REVINFO table sql 语句。您应该 运行 这个 sql 在 运行 宁 sql 之前创建基础 class 和澳元 table。在这里!!
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 table 而不是 REVINFO table。