Como fazer a chave primária de string hibernar. Estratégias @GeneratedValue
Desculpe se esta pergunta já foi feita, eu li alguns artigos, mas não encontrei a resposta.
Meu objetivo é criar um Dispositivo de entidade que tenha IMEI de campo exclusivo e gostaria de usá-lo como chave de primery e especificá-lo no momento do registro do dispositivo (especificado manualmente, durante a criação da entidade). Eu uso a ferramenta Spring roo para desenvolvimento e hibernação como ORM.
Quando especifico isso na declaração Entity:
@RooJavaBean
@RooToString
@RooJpaActiveRecord(identifierField = "IMEI", identifierType = String.class)
public class Device {...}
Eu recebo isso gerado.
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "IMEI")
private String Device.IMEI;
Durante a implantação do projeto para o servidor com o mysql db eu recebo este erro
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'
Então eu sobrescrevo o campo gerado pelo roo
@Id
@GeneratedValue(generator = "org.hibernate.id.Assigned")
@Column(name = "the_code")
private String code;
(Eu encontrei isso emouvir)
mas ainda tem erro, então eu mudei o código simplesmente para isso
@Id
private String IMEI;
e então funciona bem e me pede para especificar o campo imei antes de salvar a entidade.
Minhas perguntas são:
é correto usar meu campo personalizado como id.
é ok por String
é ok que não é gerado com hibernate mas retirado do dispositivo imei.
o que é org.hibernate.id.Assigned
Por que o código gerado pelo roo para @RooJpaActiveRecord (identifierField = "IMEI", identifierType = String.class) não funciona.
é possível criar chave de primery gerada automaticamente por String
qual é o valor padrão da estratégia GeneratedValue (meu último caso)
Eu lidocumento oficial mas não entendi tudo, por favor me encaminhe para o artigo onde eu li sobre tudo isso.
Obrigado, desculpe por longa pergunta.