1

postgresqlのrecsテーブルにrecsモデルをマッピングしていますが、一部のフィールドはSetとして宣言されています。コードを実行すると、次のようにエラーが発生しました。

org.hibernate.exception.SQLGrammarException: could not initialize a collection: Recs._recsDetailName
caused by: org.postgresql.util.PSQLException: ERROR: relation "recs__recsdetailname" does not exist

私のrecsモデル:

@Entity
@Table(name = "RECS", uniqueConstraints = @UniqueConstraint(columnNames = "id"))
public class Recs implements Serializable, Cloneable {

    /**
     * Serialized version unique identifier.
     */
    private static final long serialVersionUID = -7316874431882307750L;

    @Id
    @Column(name = "id")
    private int _id;

    @Basic
    @Column(name = "recs_num")
    private int _recsNum;

    @Basic
    @Column(name = "details")
    private String _details;

    @Column(name = "d_stamp")
    private Date _timeStamp;

    @ElementCollection(fetch = FetchType.EAGER) 
    @Column(name = "recs_detail_name")
    private Set<String> _recsDetailName;

    ..

私のテーブル:

        Column         |            Type             |  Modifiers                           
-----------------------+-----------------------------+-------------------------------
 id                    | integer                     | not null default 
 recs                  | xml                         | 
 recs_num              | integer                     | 
 details               | character varying(300)      | 
 d_stamp               | timestamp without time zone | default now()
 recs_detail_name      | text[]                   

|

db内のサンプルrecs_detail_nameは次のようになります。

{"TeleNav GPS Navigator","Photobucket for BlackBerry","Cellfire Mobile Coupons"}

誰もが何が間違っているのか知っていますか?ありがとう

4

1 に答える 1

1

ElementCollection は、セットがシリアライズされる単一の列にはマップされません。これは、文字列 (recs_detail_name) の列と、所有するテーブルの主キーを参照する外部キー列を含む追加のテーブルを使用してマップされます。もちろん、これは休止状態のドキュメントに記載されています。

Set を 1 つの列にマップする場合は、カスタム ユーザー タイプを使用する必要があります。

于 2012-05-04T22:11:47.050 に答える