java - ( Hibernate Oracle 无法插入 NULL ) 如何插入自动生成的 ID?

标签 java oracle hibernate orm hibernate-mapping

我正在从事使用 hibernate 来执行 CRUD 操作的项目。我有用户模型,我正在尝试插入信息但一直收到此错误

Hibernate: insert into APPUSER (dob, email, firstName, lastName, password) values (?, ?, ?, ?, ?)
Jun 21, 2016 2:17:07 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1400, SQLState: 23000
Jun 21, 2016 2:17:07 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: ORA-01400: cannot insert NULL into ("MYAPP8785"."APPUSER"."ID")

用户模型看起来像

@Entity
@Table(name="APPUSER")
public class AppUser {


    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Email
    @Size(max = 50)
    private String email;

    @Column
    private String dob;

    @Column
    private String firstName;

    @Column
    private String lastName;

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

这样的 Hibernate 属性
properties.put("hibernate.dialect","org.hibernate.dialect.MySQLDialect");
//properties.put("hibernate.current_session_context_class","thread");
properties.put("hibernate.hbm2ddl.auto","update");
properties.put("hibernate.show_sql","true");

我的印象是 hibernate 会自动为我生成 id 并使用序列插入它们

最佳答案

一些错误:

  • 使用正确的方言:org.hibernate.dialect.Oracle10gDialect(11g 没有特定的方言)。
  • 不要为 hibernate 生成的 ID 使用原始类型(使用 Integer,而不是 int)

IDENTITY 仅自 version 12c 之后才由 oracle 支持用于 ID 生成

您应该使用其他策略,例如使用序列。

映射看起来像:

@Id
@SequenceGenerator(name = "generator", sequenceName = "ID_SEQUENCE", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "generator")
@Column(name = "ID")
private Integer id;

关于java - ( Hibernate Oracle 无法插入 NULL ) 如何插入自动生成的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37936968/

相关文章:

java - 时区转换

java - Spring MVC 请求参数

c# - 使用 .NET 的单个命令将 SQL INSERT 和 SELECT 插入 Oracle

java - JPA 一对多关系中外键分配给 NULL

postgresql - Postgres 9.4 在单个表上读取-修改-写入时检测到死锁

java - 通过 Salesforce API 更新 sObject 属性

java - do-while 循环跳过代码

mysql - 为什么在 SQL 匹配中使用 'LIKE' 不算数?

oracle - 存储过程的参数数量 PLS-00306

hibernate - 将现有的 hibernate 功能集成到Grails中