【发布时间】:2023-04-10 08:37:01
【问题描述】:
我的目标是创建一个具有唯一字段 IMEI 的实体设备,我想将其用作主键,并在设备注册时指定它(在创建实体时手动指定)。 我使用 Spring roo 工具进行开发并作为 ORM 休眠。
当我在实体声明中指定时:
@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 是否正确?
字符串可以吗?
不是用hibernate生成而是取自设备imei可以吗?
什么是 org.hibernate.id.Assigned?
为什么 roo 为 @RooJpaActiveRecord(identifierField = "IMEI", identifierType = String.class) 生成的代码不起作用?
是否可以创建String自动生成的主键?
什么是默认 GeneratedValue 策略值(我的最后一个案例)?
我已经阅读了official doc,但没有完全理解,请参考我可以阅读的文章。
谢谢,很抱歉问题太长了。
【问题讨论】:
标签: hibernate spring-mvc generator spring-roo