无法从数据库 ERROR 中获取 SequenceInformation 但一切正常

Ars*_*Ars 6 spring hibernate spring-orm

我已经创建了 user 和 userRole 表

用户实体

@Entity
@Table(name = "USERS")
public class User {
    @Id
    @Column(name = "USERNAME",  nullable = false,  unique = true)
    private String username;

    @Column(name = "PASSWORD", nullable = false)
    private String password;

    @Column(name = "ENABLED", nullable = false)
    private boolean enabled = true;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "user", fetch = FetchType.EAGER)
    private Set<UserRole> userRole = new HashSet<>();
Run Code Online (Sandbox Code Playgroud)

用户角色实体

@Entity
@Table(name = "USER_ROLES", uniqueConstraints = @UniqueConstraint(
        columnNames = { "ROLE", "USERNAME" }))
public class UserRole {

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "user_role_id",
            unique = true, nullable = false)
    private Integer userRoleId;

    @Column(name = "ROLE")
    private String role;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "USERNAME")
    private User user;
Run Code Online (Sandbox Code Playgroud)

当我启动我的应用程序时,我收到一个错误和这个堆栈跟踪:

ERROR JdbcEnvironmentImpl:420 - Could not fetch the SequenceInformation from the database
org.h2.jdbc.JdbcSQLException: Column "start_with" not found [42122-197]
Run Code Online (Sandbox Code Playgroud)

但我没有任何“start_with”列。在我的 UserRole 实体没有 userRoleId 列之前,一切正常,但后来我添加了它来执行不唯一的“角色”列,然后发生了这种情况。但仍然一切正常,我只是被这个错误所困扰,它的原因是什么?

Emm*_*ton 6

我建议检查您的 Hibernate 方言。

由于start_valueHibernate 在我的 PostgresQL 数据库序列中查找的列,我遇到了类似的错误。此字段名称是 HibernateSequenceInformationExtractorLegacyImpl类中的默认值,该类有许多子类,每个子类都取决于您的精确数据库服务器及其版本。Hibernate 根据您指定的方言加载正确的类。

就我而言,我使用的是org.hibernate.dialect.PostgreSQLDialect方言,这是一个(不推荐使用的)类,旨在与 PostgesQL 8.2 版本一起使用。org.hibernate.dialect.PostgreSQL9Dialect因为我的数据库托管在 PostgresQL 9 服务器上,所以我切换到了。问题消失了。