数据库
首页 > 数据库> > java – 用于HSQLDB的Hibernate @generatedvalue

java – 用于HSQLDB的Hibernate @generatedvalue

作者:互联网

我对映射到HSQLDB中的表的实体中的id字段有以下定义.

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

但这似乎并没有产生一个独特的身份;而是尝试将null插入到列中,从而导致失败.如果,我手动创建序列和生成策略以使用该序列,那么数据将按预期保持.

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

解决方法:

Doesn’t a generation strategy of auto imply that the provider (hibernate in this case) will automatically choose the correct approach and do all the heavy lifting as needed (create sequence, use a native approach or whatever works for that particular platform)? Is my understanding incorrect?

它在理论上确实(它默认为使用HSQLDB的IDENTITY)并且它适用于我.这引出了以下问题:

>你使用什么方言(以防万一)?
>你是怎么创造这张桌子的?
>你能展示DDL(如果需要,激活org.hibernate.tool.hbm2ddl的日志记录)?
>你如何插入(通过Hibernate的API,对吧?)?

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

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

I created the table using the HSQL DB manager. Just normal create table address… I had not set the id column as identity in my case – just set it as primary key.

然后你有答案,使用IDENTITY列.

虽然Hibernate确实选择了正确的策略并且确实生成了相应的INSERT语句(将null传递给期望持久存入IDENTITY列的id),但如果不使用DDL,它将不会创建或更改您的物理模型生成和出口能力.

标签:java,orm,jpa,hibernate,hsqldb
来源: https://codeday.me/bug/20191006/1858090.html