OrmLite 5.0のPostgres 9.4データベースでUUIDを主キーとして使用したいと考えています。私は私のオブジェクトを作成OrmLiteとPostgresでUUIDを主キーとして扱うには?
package test;
import java.util.UUID;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.field.DataType;
import com.j256.ormlite.table.DatabaseTable;
@DatabaseTable(tableName = "test")
public class Test
{
@DatabaseField(generatedId = true, dataType = DataType.UUID_NATIVE)
private UUID id;
@DatabaseField
private String text;
public Test()
{}
public UUID getId()
{
return this.id;
}
public void setId(UUID id)
{
this.id = id;
}
public String getText()
{
return this.text;
}
public void setText(String text)
{
this.text = text;
}
}
:
Test t = new Test();
t.setText("testing");
myDao.create(t);
しかし、私は次のようなエラーがあります関連するPOJOで
CREATE TABLE "test"(
"id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
"text" TEXT
)
:
テーブルは次のようになり
org.postgresql.util.PSQLException: ERROR: column "id" is of type uuid but expression is of type character varying
Hint: You will need to rewrite or cast the expression.
文書によれば、OrmLiteはオブジェクトを作成する前に(generatedId
のおかげで)UUIDを生成し、それをVARCHARとして挿入しようとすると失敗します。しかし、私は私のアプリは、IDを変更することができるようにしたくないので、私は、フィールドを読み取り専用にする:
@DatabaseField(generatedId = true, dataType = DataType.UUID_NATIVE, readOnly = true)
グレート、挿入作品が、オブジェクトに設定されているIDから生成されたIDではありませんデータベース(OrmLiteが生成したID)です。
どうすればいいですか?
私はUUIDの外部キーを持ち、OrmLiteがそれらを処理する必要があるので、OrmLiteを使用してネイティブPostgres UUIDフィールドを書くことができます。
期待通り 'generatedId'フラグなしで、作成されたオブジェクトのIDフィールドが自動的に挿入した後に移入されませんので、それは動作しません。さらに、OrmLiteは、どのフィールドがオブジェクトのキーであるかを知ることなく、外部キーを適切に処理できるとは思っていません(私は外部キー管理が必要です)。 – Val
(さらに、私はOrmLiteがUUID Postgresフィールドに書き込むことができるようにする必要があります) – Val