私は主キーとしてUUIDを使用するPostgreSQLのエンティティを永続化しようとしています。 I平野UUIDとしてそれを永続化しようとしました。以上によりJPAを使用したPostgreSQLでのUUIDの永続化
@Id
@Column(name = "customer_id")
private UUID id;
、私はこのエラーを取得:
ERROR: column "customer_id" is of type uuid but expression is of type bytea
Hint: You will need to rewrite or cast the expression.
Position: 137
私も無駄に[]バイトとしてUUIDを永続化しようとした:
@Transient
private UUID id;
@Id
@Column(name = "customer_id")
@Access(AccessType.PROPERTY)
@Lob
protected byte[] getRowId() {
return id.toString().getBytes();
}
protected void setRowId(byte[] rowId) {
id = UUID.fromString(new String(rowId));
}
@Lobを削除した場合、私が得るエラーは上記のものと同じです。私はこのような単純な何かを行うことができない非常に悪い感じている
ERROR: column "customer_id" is of type uuid but expression is of type bigint
Hint: You will need to rewrite or cast the expression.
Position: 137
:しかし@Lobでわずかに、エラー変更を適用!
私はPostgreSQL 9.1でHibernate 4.1.3.Finalを使用しています。
私は多かれ少なかれ同じ問題で多くの質問を見ましたが、それらはすべて古いものであり、まったく正直な答えはないようです。
私は醜いハッキングに頼らずに標準的な方法でこれを達成したいと思います。しかし、これが(醜い)ハッキングでしか達成できないなら、それは私がすることです。しかし、UUIDをvarcharとしてデータベースに格納したくないのは、性能が良くないからです。また、可能であれば、私のコードにHibernate依存関係を導入したくないでしょう。
任意の助けいただければ幸いです。
UPDATE 1(2012-07-03 12:15)
まあ、まあ、まあ...それは私がまったく同じコード(プレーンUUID、無変換をテストしたことをちょっと面白いです - JTDSドライバ(v1.2.5)を使用してSQL Server 2008 R2をインストールし、それが魅力的であった(もちろん、persistence.xmlの接続関連情報を変更しなければならなかった)。
さて、PostgreSQL特有の問題なのでしょうか?
[HibernateでサポートされているPostgreSQL UUID?](http://stackoverflow.com/questions/4495233/postgresql-uuid-supported-by -hibernate) –
私の記事で言及したように、同じ問題を抱えているので、多くの質問がありますが、それらはすべて古いものであり、優れた解決策を持っていないようです。あなたが言及した投稿は例外ではありません(私の質問を投稿する前にbtwを見ました)。 – ehsanullahjan