当前位置: 首页 > 面试题库 >

H2数据库:使用jdbcTemplate插入记录时,“ ID”列不允许NULL

艾令秋
2023-03-14
问题内容

我使用hibernate的hbm2ddl自动生成架构。这是我的域名:

@Entity
public class Reader {

  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  Long id;

  @Column(nullable=false,unique=true)
  String name;

  @Enumerated(EnumType.STRING)
  Gender gender;

  int age;

  Date registeredDate = new Date();

// getter and setter ...
}

当我使用hibernate保存a时reader,它会为ID生成ID,因此可以按预期工作reader。但是,当我使用jdbcTemplate通过纯SQL插入记录时,它报告一个错误:

org.springframework.dao.DataIntegrityViolationException: StatementCallback; 
SQL [insert into reader(name,gender,age) values('Lily','FEMALE',21)]; 
NULL not allowed for column "ID"; 
    SQL statement:insert into reader(name,gender,age) values('Lily','FEMALE',21) [23502-192]; 
nested exception is org.h2.jdbc.JdbcSQLException: NULL not allowed for column "ID"; 
    SQL statement:  insert into reader(name,gender,age) values('Lily','FEMALE',21) [23502-192]

如何解决呢?

  1. 我调试发现生成的hb2ddl的DDL是create table Book (id bigint not null, author varchar(255), name varchar(255), price double not null, type varchar(255), primary key (id))。hibernate者似乎以自己的方式处理id策略,但是如何处理呢?
  2. @GeneratedValue(strategy=GenerationType.AUTO)应产生auto increment的DDL的语句,但我没有发现。我想念吗?

问题答案:

尝试使用strategy=GenerationType.IDENTITY而不是strategy=GenerationType.AUTO

hibernate.dialect也可能是错误的

hibernate.dialect=org.hibernate.dialect.H2Dialect


 类似资料:
  • 问题内容: 我想初始化一个H2数据库,但是我不确定记录是否存在。如果它们不存在,我什么都不愿做,但是如果它们不存在,我想写默认值。 像这样的东西: 问题答案: 以下内容适用于MySQL,PostgreSQL和H2数据库:

  • 我已经尝试过在网上找到的一些解决方案,但没有一个有效。我正在使用内存中的持久hibernate数据库。 包装高级。配置。数据库配置;

  • 问题内容: Dim cmd As SqlCommand = sqlconn.CreateCommand sqlconn.Open() cmd.CommandType = CommandType.StoredProcedure cmd.CommandText = “udpateELSEinsertEquipmentProfile” 当没有空值时,我的插入和更新存储过程正在工作,但是当我需要使某些列真

  • 问题内容: 我正在研究与H2数据库接口的Java插件。我真正想要的是“插入忽略”语句;但是,我知道H2不支持此功能。我也知道Merge,但这并不是我想要的,如果记录存在,我不想更改它。 我正在考虑的是只是运行插入并让重复键异常发生。但是,我不希望这填满我的日志文件。DB调用发生在我无法更改的导入类中。所以我的问题是: 这是合理的做法吗?我不是让错误发生的人,但这似乎是这种情况下的最佳方法(它应该不

  • 我想更改我的嵌入式数据库的日志记录。每次我打开一个连接,atm都会记录“......创建新的JDBC驱动程序连接到......”。在我的测试套件中,我为每个请求打开一个新的连接,现在有很多这样的消息。 我没有找到任何类型的日志级别。我只是可以设置PrintWriter。但是我想看看错误msgs。我在Spring之外运行这个作为常规单元测试。 有什么想法吗?

  • 我已经读了很多关于这个错误的东西,但仍然没有发现错误。 作为我的params:[461,100,TO_TIMESTAMP('2015-01-28 00:00:01','yyyy-mm-dd hh24:mi:ss'),18888]这实际上是有效的。 任何形式的帮助都将不胜感激。提前感谢!