首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Hibernate envers5.2.14即使在不必要的情况下也会创建hibernate_sequence表

Hibernate envers5.2.14即使在不必要的情况下也会创建hibernate_sequence表
EN

Stack Overflow用户
提问于 2018-04-04 15:38:24
回答 1查看 1.9K关注 0票数 4

我将Spring应用程序从Spring Boot 1.5.x切换到Spring Boot2.0。我正在使用Hibernate Envers,在切换之前,我使用RevInfo表来存储有关修订的信息。id是自动递增的。

在迁移之后,Hibernate创建了一个新的hibernate_sequence表,这个表没有用,也没有用。

我以这种方式定制了我的RevInfo bean:

代码语言:javascript
复制
@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吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-07 08:38:16

谢谢你的帖子。它帮助我找到了消除(自动)生成hibernate_sequence表的解决方案。我的解决方案如下。请注意,我使用了@GeneratedValue(strategy = GenerationType.IDENTITY),这可能就是您要查找的内容。不管怎样,这是我想出来的课程。

代码语言:javascript
复制
@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() ) + ")";
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49645330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档