dre*_*nda 5 spring hibernate hibernate-envers spring-boot
我将 Spring 应用程序从 Spring Boot 1.5.x 切换到 Spring Boot 2.0。我正在使用 Hibernate Envers,在切换之前我有RevInfo一个表来存储有关修订的信息。id 是一个自动增量。
迁移后,Hibernate 创建了一个hibernate_sequence无用且未使用的新表。
我以这种方式定制了 RevInfo bean:
@Entity
@RevisionEntity(RevInfoListener.class)
public class RevInfo {
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
@GenericGenerator(name = "native", strategy = "native")
@RevisionNumber
private int id;
@RevisionTimestamp
private long timestamp;
private String username;
private String remoteAddress;
//omitted getters and setters
Run Code Online (Sandbox Code Playgroud)
我避免扩展,DefaultRevisionEntity因为我更改了@Id @Generated value以便利用自动增量(我正在使用 Mysql)。
尽管如此,使用spring.jpa.hibernate.ddl-auto: validateHibernate时,即使不使用,也需要表的存在。事实上,根据我的配置,Hibernate 使用我的自动增量 id,并且该表hibernate_sequence永远不会更新。
如何禁用表的创建/需要hibernate_sequence?如果我不能,这可能是一个错误吗?
小智 1
谢谢你的帖子。它帮助我找到了消除(自动)生成 hibernate_sequence 表的解决方案。我的解决方案如下。请注意,我使用了@GeneratedValue(strategy = GenerationType.IDENTITY),这可能就是您正在寻找的。无论如何,这是我想出的课程。
@Entity(name = "EnversRevinfo")
@Table(name = "z_envers_revinfo")
@RevisionEntity( EnversRevinfo.EnversRevisionEntityListener.class)
public class EnversRevinfo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@RevisionNumber
private int id;
@RevisionTimestamp
private long timestamp;
@Transient
public Date getRevisionDate() {
return new Date( timestamp );
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public static class EnversRevisionEntityListener implements RevisionListener {
public void newRevision( Object revisionEntity ) {
@SuppressWarnings("unused")
EnversRevinfo enversRevinfo =
( EnversRevinfo ) revisionEntity;
}
}
@Override
public boolean equals(Object o) {
if ( this == o ) {
return true;
}
if ( !(o instanceof EnversRevinfo) ) {
return false;
}
final EnversRevinfo that = (EnversRevinfo) o;
return id == that.id
&& timestamp == that.timestamp;
}
@Override
public int hashCode() {
int result;
result = id;
result = 31 * result + (int) (timestamp ^ (timestamp >>> 32));
return result;
}
@Override
public String toString() {
return "DefaultRevisionEntity(id = " + id
+ ", revisionDate = " + DateFormat.getDateTimeInstance().format( getRevisionDate() ) + ")";
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2999 次 |
| 最近记录: |