gpt4 book ai didi

hibernate - 如何使字符串主键进入 hibernate 状态。 @GeneratedValue策略

转载 作者:行者123 更新时间:2023-12-03 08:01:37 26 4
gpt4 key购买 nike

我的目标是创建一个具有唯一字段IMEI的实体设备,我想将其用作主键,并在设备注册时指定它(手动创建实体时指定)。
我使用Spring roo工具进行开发,并作为ORM hibernate 。

当我在Entity声明中指定此代码时:

@RooJavaBean
@RooToString
@RooJpaActiveRecord(identifierField = "IMEI", identifierType = String.class)
public class Device {...}

我得到这个生成:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "IMEI")
private String Device.IMEI;

使用mysql db将项目部署到服务器时,出现此错误:
2013-03-17 20:03:23,136 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaExport - HHH000389: Unsuccessful: create table device (imei varchar(255) not null auto_increment, model varchar(255), name varchar(255) not null, version integer, primary key (imei))
2013-03-17 20:03:23,136 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaExport - Incorrect column specifier for column 'imei'

然后我用覆盖roo生成的字段
@Id
@GeneratedValue(generator = "org.hibernate.id.Assigned")
@Column(name = "the_code")
private String code;

(我在 here中找到了它)

但是仍然会出错。然后,我仅将代码更改为此:
 @Id
private String IMEI;

然后工作正常,并要求我在保存实体之前指定imei字段。

我的问题是:

将我的自定义字段用作ID是否正确?

用String可以吗?

它不是由 hibernate 生成的,而是从设备imei取来的吗?

什么是org.hibernate.id.Assigned?

为什么roo为@RooJpaActiveRecord(identifierField =“IMEI”,identifierType = String.class)生成的代码不起作用?

创建String自动生成的主键是否可行?

默认的GeneratedValue策略值是什么(我的最后一种情况)?

我读过 official doc,但还不了解所有内容,请带我去阅读我可以阅读的所有文章。

谢谢,对不起,很长的问题。

最佳答案

@GeneratedValue(strategy = GenerationType.AUTO)不能与String类型一起使用。因此,如果要使用String作为ID,则必须手动分配它。但是,如果适合您,可以使用String作为ID。

使用org.hibernate.id.Assigned也意味着您必须在保存数据之前分配ID值。

如果未添加@GeneratedValue批注,则会为默认值分配生成器,这意味着必须由应用程序设置标识符的值。

有关详细信息,请引用the hibernate manual

关于hibernate - 如何使字符串主键进入 hibernate 状态。 @GeneratedValue策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15466518/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com