So aktivieren Sie den Ruhezustand des String-Primärschlüssels. @GeneratedValue-Strategien

Entschuldigung, wenn diese Frage bereits gestellt wurde, ich habe einige Artikel gelesen, aber keine Antwort gefunden.

Mein Ziel ist es, eine Entität zu erstellen. Gerät mit einem eindeutigen Feld IMEI. Ich möchte es als Primärschlüssel verwenden und es bei der Geräteregistrierung angeben (manuell festgelegt, während die Entität erstellt wird). Ich benutze Spring Roo Tool für die Entwicklung und Ruhezustand als ORM.

Wenn ich dies in der Entitätsdeklaration spezifiziere:

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

Ich lasse das generieren.

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "IMEI")
private String Device.IMEI;

Beim Deployment des Projekts auf einen Server mit mysql db erhalte ich diesen Fehler

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'

Dann überschreibe ich roo generiertes Feld mit

@Id
@GeneratedValue(generator = "org.hibernate.id.Assigned")
@Column(name = "the_code")
private String code;

(Ich habe das in gefundenhören)

aber trotzdem fehler bekommen, dann habe ich einfach den code dazu geändert

 @Id
private String IMEI;

und dann funktioniert es gut und fordert mich auf, imei Feld vor dem Speichern der Entität anzugeben.

Meine Fragen sind:

Ist es richtig, mein benutzerdefiniertes Feld als ID zu verwenden?

Ist es in Ordnung, von String

ist es ok, dass es nicht mit hibernate generiert wird sondern imei vom gerät genommen wird.

was ist org.hibernate.id.Assigned

Warum Roo generierten Code für @ RooJpaActiveRecord (identifierField = "IMEI", identifierType = String.class) nicht funktioniert.

Ist es möglich, einen automatisch generierten String-Primärschlüssel zu erstellen?

Was ist der Standardwert für die GeneratedValue-Strategie (mein letzter Fall)?

Ich habe gelesenoffizielle doc aber ich habe nicht alles verstanden, bitte verweise mich auf den Artikel, in dem ich darüber gelesen habe.

Danke, sorry für die lange Frage.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage