gpt4 book ai didi

spring - 即使没有必要,Hibernate envers 5.2.14 也会创建 hibernate_sequence 表

转载 作者:行者123 更新时间:2023-12-04 13:45:20 26 4
gpt4 key购买 nike

我将 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

我避免延长 DefaultRevisionEntity因为我改了 @Id @Generated value为了利用自动增量(我使用的是 Mysql)。

尽管如此,使用 spring.jpa.hibernate.ddl-auto: validate ,Hibernate 要求表的存在即使不使用。事实上,在我的配置中,Hibernate 正在使用我的自动增量 ID 和表 hibernate_sequence永远不会更新。

如何禁用 hibernate_sequence 的创建/需求 table ?如果我不能,这可能是一个错误吗?

最佳答案

谢谢你的帖子。它帮助我找到了消除 hibernate_sequence 表的(自动)生成的解决方案。我的解决方案如下。请注意,我使用了 @GeneratedValue(strategy = GenerationType.IDENTITY) ,这可能就是您要找的。无论如何,这是我想出的类(class)。

@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() ) + ")";
}
}

关于spring - 即使没有必要,Hibernate envers 5.2.14 也会创建 hibernate_sequence 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49645330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com