【发布时间】:2017-05-04 14:30:01
【问题描述】:
我在配置为使用嵌入式 H2 数据库的 Spring 应用程序中使用 JPA。
我有一个这样定义的用户实体:
@Entity
@SequenceGenerator(name = "myseq", sequenceName = "MY_SEQ", initialValue = 1000, allocationSize = 1)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "myseq")
private Long id;
@Column(name = "USERNAME")
private String userName;
@Column(name = "PASSWORD_ENCODED")
private String passwordEncoded;
@ManyToMany
@JoinTable(name = "USER_ROLES", joinColumns = @JoinColumn(name = "USER_ID", referencedColumnName = "ID"), inverseJoinColumns = @JoinColumn(name = "ROLE_ID", referencedColumnName = "ID"))
private Set<Role> roles;
}
//getters
}
上下文定义如下:
@Configuration
@EnableWebMvc
@EnableWebSecurity
@EnableAutoConfiguration
@EnableJpaRepositories(basePackages = "my.package")
@EntityScan(basePackages = "my.package")
@ComponentScan(basePackages = "my.package" )
public class AuthenticationWebAppContext extends WebSecurityConfigurerAdapter {
}
我可以从生成的日志中看到生成了 MY_SEQ。但是,initialValue 和 allocationSize 完全被忽略了,序列没有分配给 USER 的 id 字段
17:22:29.236 [main] DEBUG org.hibernate.SQL - 创建序列 my_seq 以 1 递增 1 开始 17:22:29.237 [main] DEBUG org.hibernate.SQL - 创建表角色(id bigint 默认生成为标识,名称 varchar(255),主键 (id)) 17:22:29.248 [main] DEBUG org.hibernate.SQL - 创建表用户(id bigint not null,password_encoded varchar(255),username varchar(255),主键 (id))因此,当 data.sql 文件尝试插入行时,出现以下错误:
Caused by: org.h2.jdbc.JdbcSQLException: NULL not allowed for column "ID"; SQL statement:
INSERT INTO user (USERNAME, PASSWORD_ENCODED) VALUES ('user1', '<some_giberish>') [23502-194]
我错过了什么?
【问题讨论】:
标签: java spring hibernate jpa h2