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.

questionAnswers(3)

yourAnswerToTheQuestion