マップを持つエンティティがあります。PostgreSQL で Hibernate を使用しています。マップ内のクラスは Java によって定義されており、私が注釈を付けることはできません。変更しようとしているクラスは、変更できない XML スキーマから生成されました。
ので、私は持っています
import java.util.HashMap;
import java.util.Map;
import javax.xml.namespace.QName;
@Entity public class TestClass {
@XmlTransient
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long pk;
...
@XmlAnyAttribute
@ElementCollection(fetch = FetchType.EAGER)
@Embedded
private final Map<QName, String> otherAttributes = new HashMap<QName, String>();
...
PostGreSQL を使用していますが、次のエラーが発生します。
Unsuccessful: create table TestClass_otherAttributes (TestClass_pk int8 not null, count int4 not null, hash int4 not null, offset int4 not null, value varchar(255), localPart varchar(255), namespaceURI varchar(255), prefix varchar(255), primary key (TestClass_pk, localPart, namespaceURI, prefix))
ERROR: syntax error at or near "offset" Position: 160
明らかにこれは、文字列の 1 つ (QName にある可能性が高いですが、特定するのは難しい) の順序フィールドが予約されているため、テーブルの作成が失敗していることを意味します。
私はこれを調査し、結合テーブルの作成方法と命名方法に影響を与える他の多くの注釈を見つけましたが、フィールド名を引用することはできません (QName または String に注釈を付けることはできません) も、列名にも影響を与えませんキーまたは値クラスに注釈を必要としません。
私の質問は、このマップを保持できるように追加する注釈の最小数はいくつですか?