我将Spring应用程序从Spring Boot 1.5.x切换到Spring Boot2.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
我避免扩展DefaultRevisionEntity
,因为我更改了@Id
@Generated
value
,以便利用自动增量(我使用的是Mysql)。
尽管如此,使用spring.jpa.hibernate.ddl-auto: validate
时,Hibernate要求存在表,即使不使用。实际上,在我的配置中,Hibernate使用的是我的自动增量id,而表hibernate_sequence
永远不会更新。
如何禁用hibernate_sequence
表的创建/需要?如果我不能,这会是一个bug吗?
发布于 2018-06-07 08:38:16
谢谢你的帖子。它帮助我找到了消除(自动)生成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() ) + ")";
}
}
https://stackoverflow.com/questions/49645330
复制相似问题