1.背景紹介
Webアプリケーションはsshフレームワークを使用し、データベースはsqlserver2014バージョンを使用します。
2.問題:
顧客の要件に応じて、ID列のデータタイプはuniqueidentifierである必要があります。当初、エンティティクラスのIDはjava.lang.Stringになるように設計されていました。マッピングファイル内のIDの拡張メソッドはuuid.hexです。
1
2
3
4
5
6
7
8
9
プライベートのjava.lang.String ID。
public java.lang.String getId(){
return id;
}
public void setId(java.lang.String id){
this.id = id;
}
1
2
3
<id name = "id" column = "ID" type = "java.lang.String">
<generator class = "uuid .hex "> </ generator>
</ id>
保存時にエラーが報告されました:文字列uniqueidentifierの保存に失敗しました。
3.解決策:
マッピングファイルのID拡張モードを「割り当て済み」に変更し、プログラムで値を割り当てます。
1
2
3
4
5
6
7
8
9
10
11
12
/マッピングファイル/
<id name = "id" column = "ID" type = "java.lang.String">
<generator class = "assigned"> </ generator>
</ id>
/割り当てコード/
UUID uuid = java.util.UUID.randomUUID();
object.setId(uuid.toString);
this.save(object); attach
:テーブルを作成するステートメント
1
2
3
4
5
CREATE TABLE tableName
(
ID UNIQUEIDENTIFIER、
-他のコードを省略
);
補足知識:SQLServerのuniqueidentifierデータタイプの理解
uniqueidentifierは、グローバルに一意の識別子(GUID)として理解できます。newid関数を使用して値を初期化し、文字列定数を次の形式に変換できます(https://blog.51cto.com/14830013/2549657、各xは0〜9)または、af)の範囲の16進数。
たとえば、6F9619FF-8B86-D011-B42D-00C04FC964FFは有効な一意の識別子の値です。
比較演算子は、uniqueidentifier値で使用できます。ただし、2つの値のビットパターンを比較しても、並べ替えはできません。uniqueidentifier値で許可される操作は、比較(=、<>、<、>、<=、> =)とNULLのチェック(ISNULLおよびISNOT NULL)のみです。
他の算術演算子は許可されていません。すべての列の制約と属性(IDENTITYを除く)は、uniqueidentifierデータタイプに使用できます。
1
2
3
宣言は、UNIQUEIDENTIFIER @myid
セット@ MYID = NEWID()
@myidのprint'Valueは+ CAST(varchar型として@myid(255))である
あなたが上記のプログラムを実行するたび、それは別のUNIQUEIDENTIFIERを返します。
uniqueidentifierデータタイプは、IDENTITYプロパティのように新しく挿入された行の新しいIDを自動的に生成しません。
新しいuniqueidentifier値を取得するには、テーブルにNEWID関数を指定するDEFAULT句、またはNEWID関数を使用するINSERTステートメントが必要です。
1
2
3
4
5
6
7
CREATE TABLE MyUniqueTable
(UniqueColumn UNIQUEIDENTIFIER DEFAULT NEWID()、
Characters VARCHAR(10))
GO
INSERT INTO MyUniqueTable(Characters)VALUES( 'abc')
INSERT INTO MyUniqueTable VALUES(NEWID()、 'def')
GO
sqlサーバーに保存されたオブジェクト文字列をuniqueidentifierに変換できない問題を解決するための上記の記事は、エディターによって共有されるすべてのコンテンツです。参照を提供したいと思います。スクリプトハウスをサポートできることを願っています。