yar*_*hyn 6 hibernate generator spring-mvc spring-roo
对不起,如果已经问过这个问题,我已经阅读了一些文章,但没有找到答案.
我的目标是创建具有唯一字段IMEI的实体设备,并且我想将其用作质量密钥,并在设备注册时指定它(在创建实体时指定manualy).我使用Spring roo工具进行开发,并将hibernate用作ORM.
当我在实体声明中指定它时:
@RooJavaBean
@RooToString
@RooJpaActiveRecord(identifierField = "IMEI", identifierType = String.class)
public class Device {...}
Run Code Online (Sandbox Code Playgroud)
我得到了这个.
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "IMEI")
private String Device.IMEI;
Run Code Online (Sandbox Code Playgroud)
使用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'
Run Code Online (Sandbox Code Playgroud)
然后我用.覆盖roo生成的字段
@Id
@GeneratedValue(generator = "org.hibernate.id.Assigned")
@Column(name = "the_code")
private String code;
Run Code Online (Sandbox Code Playgroud)
(我听到了这个)
但仍然得到错误,然后我简单地将代码更改为此
@Id
private String IMEI;
Run Code Online (Sandbox Code Playgroud)
然后它工作正常,并要求我在保存实体之前指定imei字段.
我的问题是:
将我的自定义字段用作id是否正确.
字符串是否可以
是不是它不是通过休眠生成的,而是从设备imei中获取的.
什么是org.hibernate.id.Assigned
为什么roo为@RooJpaActiveRecord生成代码(identifierField ="IMEI",identifierType = String.class)不起作用.
是否可以创建String自动生成的primery密钥
什么是默认的GeneratedValue策略值(我的最后一个案例)
我已经阅读了官方文档,但没有理解所有内容,请参考我在这里阅读所有这些内容的文章.
谢谢,抱歉很长的问题.
Ste*_*ola 18
一个简单的解决方案可能是@PrePersist在您的实体类上使用注释.
只需添加方法即可
@PrePersist
private void ensureId(){
this.setId(UUID.randomUUID().toString());
}
Run Code Online (Sandbox Code Playgroud)
并摆脱@GeneratedValue注释.
PrePersist文档:http://docs.oracle.com/javaee/5/api/javax/persistence/PrePersist.html
斯特凡诺
| 归档时间: |
|
| 查看次数: |
26242 次 |
| 最近记录: |