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

HSQLDB的Hibernate @GeneratedValue

百里文景
2023-03-14
问题内容

对于映射到HSQLDB中的表的实体中的id字段,我具有以下定义。

...
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "ID")
private Integer id;
...

但这似乎不会生成唯一的ID。而是尝试将null插入列中,这将导致失败。如果我手动创建一个序列和生成策略以使用该序列,那么数据将按预期持久保存。

自动生成策略不是暗示提供者(在这种情况下为hibernate)将自动选择正确的方法并根据需要进行所有繁重的工作(创建序列,使用本机方法或适用于该特定平台的任何方法)吗?我的理解不正确吗?


问题答案:

自动生成策略不是暗示提供者(在这种情况下为hibernate)将自动选择正确的方法并根据需要进行所有繁重的工作(创建序列,使用本机方法或适用于该特定平台的任何方法)吗?我的理解不正确吗?

从理论上讲(它在HSQLDB中默认为IDENTITY),并且对我有用。这提出了以下问题:

  • 您正在使用什么方言(以防万一)?
  • 您是如何创建表格的?
  • 您可以显示DDL(org.hibernate.tool.hbm2ddl如果需要,激活DDL的日志记录)吗?
  • 您如何插入(通过Hibernate的API,对吗?)?

这是Foo使用HSQLDB时实体的示例DDL :

create table Foo (
    id bigint generated by default as identity (start with 1), 
    bar varchar(100),
    primary key (id)
)

我使用HSQL DB管理器创建了表。只是正常的创建表地址…就我而言,我没有将id列设置为标识-只是将其设置为主键。

然后您就有了答案,请使用IDENTITY专栏。

虽然Hibernate确实选择了正确的策略并确实生成了适当的INSERT语句(传递null给预期将保留在IDENTITY列中的id
),但是如果您不使用DDL生成和导出,它将不会创建或更改您的物理模型。能力。



 类似资料:
  • 问题内容: 我正在尝试实施 JUnit 测试以检查DAO的功能。(DAO将创建/读取基本的对象/表关系)。 我遇到的麻烦是DAO的持久性(对于非测试代码)是通过使用 Spring / Hibernate 的内部解决方案完成的,该解决方案消除了我发现的大多数示例所包含的常用模板。 因此,我在理解如何设置 JUnit 测试以实现DAO来创建/读取(只是非常基本的功能)内存 HSQLDB方面 遇到了一些

  • 问题内容: 我在使用Hibernate和PostgreSQL进行生产以及使用HSQLDB进行测试时遇到问题。 我正在使用自上而下的方法让Hibernate创建数据库架构。 我也在使用注释;hibernate.cfg.xml的映射部分仅包含诸如 Hibernate默认值之类的行,以将PostgreSQL上的String变量转换为character changes(255),这在某些情况下对我来说是不

  • Hsqldb是一个开放源代码的JAVA数据库,其具有标准的SQL语法和JAVA接口,它可以自由使用和分发,非常简洁和快速的。具有Server模式,进程内模式(In-Process)和内存模式(Memory-Only)三种。运行Hsqldb需要hsqldb.jar包, 它包含了一些组件和程序。每个程序需要不同的命令来运行。

  • 问题内容: 我经常使用内存中的HSQL数据库作为测试数据库来编写数据库相关代码的单元测试。最近,我决定从1.8.1.3升级到2.2.9,以利用在2.x版本分支中添加的ROW_NUMBER()支持。 似乎在某种程度上,新版本比旧版本更严格。使用Hibernate(3.6.10)作为ORM,例如,我可能创建一个对象来创建first ,然后使用该对象来填充测试数据,然后将to 对象用于被测试的类,这将创

  • 我正在尝试写一个持久性测试。我有一个Maven项目,我使用Arquillian和嵌入式glassfish容器,Hibernate(作为我的JPA提供商)和内存中的HSQLDB作为我的存储。 当我运行测试时,我得到一个语法异常(如果需要,我可以发布完整的堆栈跟踪: 日志似乎显示了正确创建的表: 我已经包括了我认为相关的文件 坚持。xml 波姆。xml 实体类 测试班 坚持不懈xml: pom.xml

  • 我下载并安装了uCanAccess JAR,方法如下:不使用ODBC从Java操作Access数据库,我正在学习如何使用microsoft Access db for Java,这是我使用的代码 当我运行java程序时,它会出现这样的错误 UCANAccess-2.0.9.3.jar commons-lang-2.6.jar commons-logging-1.1.1.jar 所以...我怎么才能