9

JPA 経由でマップしようとしている SQL Server データベースを継承しました。多くのテーブルにはuniqueidentifier列があります。私はそれらを次のようにマッピングしようとしています:

@Id
@GenericGenerator(name = "generator", strategy = "guid", parameters = {})
@GeneratedValue(generator = "generator")
@Column(name = "APPLICATION_ID")
private String id;

休止状態は次のように不平を言います:

Found: uniqueidentifier, expected: varchar(255)
4

2 に答える 2

13

POJO の主キー プロパティのデータ型によって、マップされた DB 列のデータ型が決まります。これはDialectクラスによって指定されます。hibernate が提供するSQLServerDialectによると、にマップされるデータ型はなくuniqueidentifierStringデフォルトで にマップされますvarchar(255)

guid主キーの戦略Stringは、休止状態がPOJOの主キープロパティのGUID値を生成し、この生成されたGUID値がvarchar(255)列に挿入されて効果をシミュレートすることのみを意味すると思います uniqueidentifier

のcolumnDefinition属性を使用して、 Dialectクラスで指定されたマッピングをオーバーライドすることができます。@Column

 @Id
 @GenericGenerator(name = "generator", strategy = "guid", parameters = {})
 @GeneratedValue(generator = "generator")
 @Column(name = "APPLICATION_ID" , columnDefinition="uniqueidentifier")
 private String id;
于 2012-05-05T09:32:06.267 に答える
0

使用する必要がありますuuid2

@Id
@GenericGenerator(name = "generator", strategy = "uuid2", parameters = {})
@GeneratedValue(generator = "generator")
@Column(name = "APPLICATION_ID" , columnDefinition="uniqueidentifier")
private String id;

これは私にとってはうまくいきます。

于 2020-10-17T06:28:31.780 に答える