私の目標は、一意のフィールドIMEIを持つエンティティDeviceを作成することです。これを主キーとして使用し、デバイス登録時に指定します(エンティティの作成時に手動で指定します)。私は開発にSpringrooツールを使用し、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;
(私はここでこれを見つけました)
しかし、それでもエラーが発生します。次に、コードを単純に次のように変更しました。
@Id
private String IMEI;
次に、正常に動作し、エンティティを保存する前にimeiフィールドを指定するように求められます。
私の質問は次のとおりです。
カスタムフィールドをidとして使用するのは正しいですか?
文字列で大丈夫ですか?
Hibernateで生成されるのではなく、デバイスimeiから取得されても大丈夫ですか?
org.hibernate.id.Assignedとは何ですか?
@RooJpaActiveRecord(identifierField = "IMEI"、identifierType = String.class)のroo生成コードが機能しないのはなぜですか?
文字列の自動生成された主キーを作成することは可能ですか?
デフォルトのGeneratedValue戦略値(私の最後のケース)は何ですか?
公式ドキュメントを読みましたが、すべてを理解していませんでした。このすべてについて読むことができる記事を参照してください。
長い質問をありがとう、ごめんなさい。