【问题标题】:Hibernate envers 5.2.14 creates hibernate_sequence table even when not necessary即使没有必要,Hibernate envers 5.2.14 也会创建 hibernate_sequence 表
【发布时间】:2018-09-13 16:19:51
【问题描述】:

我将我的 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 表的创建/需要?如果我不能,这会是一个错误吗?

【问题讨论】:

    标签: spring hibernate spring-boot hibernate-envers


    【解决方案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() ) + ")";
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 2020-03-11
      相关资源
      最近更新 更多