java - Spring启动找不到HIBERNATE_SEQUENCE

标签 java spring hibernate spring-boot

对于许多应用程序,我们需要的只是放置正确的 Spring 数据依赖于类路径。它工作正常:

配置:

@Configuration
@EnableAutoConfiguration
@EntityScan(basePackages = {"io.boot.spring.entities"})
@EnableJpaRepositories(basePackages = {"io.boot.spring.repositories"})
@EnableTransactionManagement
public class ConfigForJPA {

@Bean
@ConfigurationProperties("spring.datasource.hikari")
public HikariDataSource dataSource() {
    return (HikariDataSource) DataSourceBuilder.create()
            .type(HikariDataSource.class).build();
}

}

应用程序属性:

spring.datasource.hikari.jdbc-url=jdbc:h2:mem:mydb
spring.datasource.hikari.username=sa
spring.datasource.hikari.password=
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
spring.jpa.hibernate.use-new-id-generator-mappings=true

控制台:

Hibernate: drop table Blog if exists
Hibernate: drop table Item if exists
Hibernate: drop table Role if exists
Hibernate: drop table User if exists
Hibernate: drop table User_roles if exists
Hibernate: drop sequence if exists hibernate_sequence
Hibernate: create sequence hibernate_sequence start with 1 increment by 1
Hibernate: create table Blog 
Hibernate: create table Item 
Hibernate: create table Role 
Hibernate: create table User 
Hibernate: create table User_roles (users_id integer not null, roles_id integer not null)
main] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000230: Schema export complete
j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
Hibernate: call next value for hibernate_sequence
Hibernate: insert into Role (name, id) values (?, ?)
Hibernate: call next value for hibernate_sequence
Hibernate: insert into Role (name, id) values (?, ?)
Hibernate: call next value for hibernate_sequence
Hibernate: insert into User (email, name, password, id) values (?, ?, ?, ?)
Hibernate: insert into User_roles (users_id, roles_id) values (?, ?)
Hibernate: insert into User_roles (users_id, roles_id) values (?, ?)

但是 Spring boot 文档说要完全控制配置 EntityManagerFactory,需要添加一个名为‘entityManagerFactory’的@Bean 当我将它添加到我的配置中时。

配置:

@Bean
public LocalContainerEntityManagerFactoryBean 
    entityManagerFactory(EntityManagerFactoryBuilder builder) {
        return builder
                .dataSource(dataSource())
                .packages("io.boot.spring")
                .persistenceUnit("io.boot.spring.entities")
                .build();

    }

它给出了错误:

控制台:

: HHH000412: Hibernate Core {5.0.11.Final}
: HHH000206: hibernate.properties not found
: HHH000021: Bytecode provider name : javassist
: HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Started.
: HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory
 for persistence unit 'io.boot.spring.entities'
Hibernate: call next value for hibernate_sequence
: SQL Error: 90036, SQLState: 90036
: Sequence "HIBERNATE_SEQUENCE" not found; SQL statement:
call next value for hibernate_sequence [90036-193]

为什么没有找到 HIBERNATE_SEQUENCE?我没有修改任何东西 刚刚将entityManagerFactory bean添加到配置文件

实体:

@Entity
public class Role {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE)
    private Integer id;

    private String name;

    ... getters and setters

最佳答案

解决方案是:

CREATE TABLE CLIENT(
  ID            INTEGER         NOT NULL,
  CLIENT_NAME   VARCHAR(255)    NOT NULL,
  ACTIVE        CHAR(1)         NOT NULL  DEFAULT 'Y'
);

 CREATE SEQUENCE CLIENT_SEQUENCE_ID START WITH (select max(ID) + 1 from CLIENT);

(这允许您使用静态值预填充 CLIENT,并相应地初始化序列)

在 Java 中

@Id
@SequenceGenerator(name= "CLIENT_SEQUENCE", sequenceName = "CLIENT_SEQUENCE_ID", initialValue=1, allocationSize = 1)
@GeneratedValue(strategy=GenerationType.AUTO, generator="CLIENT_SEQUENCE")
private Long id

;

请按照上述说明进行操作。

关于java - Spring启动找不到HIBERNATE_SEQUENCE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42160227/

相关文章:

java - 为什么我们在 ArrayList<Integer> a1 = new ArrayList<Integer>() 中使用包装类 Integer?

java - JPA Hibernate 希望延迟加载返回空集合

java - 来自 ant 在 linux 中构建的 java 类的数据库

java - 为多个 Web 服务指定模拟时,instanceof 运算符的替代方案

hibernate - 如何创建名称为 'user'的表

java - 如果使用传递给报告的 bean 集合作为参数,则不会显示表

java - 使用 HttpClient 通过 java 客户端访问 power Bi 组

java - selectOneMenu 和 selectItems

java - 部署后,Spring 不再找到 .Jar 之外的 JDBC.Properties

java - Spring Boot 从 YAML(属性)文件中读取数组