6

と の 2 つのエンティティがDocumentありBodyElement、それらを Hibernate 4.2 で永続化しようとしています。mtdt_tは正しく入力されますがdocidmtdt_body_tテーブルの外部キーはNULL.

休止状態がdocid値なしで挿入しようとしているのが見えます。insert into mtdt_body_t values ( )

@Entity
@Table(name = "mtdt_t")
public class Document implements Serializable {

    @Id  
    @Column(name = "docid", unique = true, nullable = false)
    private String docid;

    @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
    @OrderColumn
    @JoinColumn(name = "docid", nullable = false)
    private BodyElement bodyElement;

    public String getDocid() {
        return docid;
    }

    public void setDocid(String docid) {
        this.docid = docid;
    }

    public BodyElement getBodyElement() {
        return bodyElement;
    }

    public void setBodyElement(BodyElement bodyElement) {
        this.bodyElement = bodyElement;
    }

}

@Entity
@Table(name = "mtdt_body_t")
public class BodyElement implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @OneToOne
    @JoinColumn(name = "docid", insertable = false, updatable = false, nullable = false)
    private Document document;

    public BodyElement() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Document getDocument() {
        return document;
    }

    public void setDocument(Document document) {
        this.document = document;
    }

}

私は別の分野をやめました。Document私が持っている、

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
@OrderColumn
@JoinColumn(name = "docid", nullable = false)
@XmlPath("head/meta/kb:keywords/kb:keyword")
private Set<Keyword> keywords;

Keywordクラスでは、外部キーを次のようにマッピングしています。

@ManyToOne
@JoinColumn(name = "docid", insertable = false, updatable = false, nullable = false)
@XmlTransient
private Document document;

そのdocidフィールドは決して ではありませんNULL

@OneToOneと比較して、マッピングについて何か特別なことはあり@OneToManyますか? 私はフィールドで自分がしたことを真似ただけ@OneToManyです@OneToOne

ありがとう

4

1 に答える 1

-1
  1. OrderColumn アノテーションは、OneToMany または ManyToMany 関係、または要素コレクションで指定されます。OrderColumn アノテーションは、順序付けされるコレクションを参照する関係の側で指定されます。order 列は、エンティティまたは埋め込み可能なクラスの状態の一部として表示されません。 ドキュメントへのリンク

  2. マッピングに誤りがあります。mappingBy 属性を忘れていました。これは、エンティティ間の関係が既にマッピングされていることを意味するため、2 回行う必要はありません。mappingBy 属性を使用して、「やあ、あそこは終わった」と言うだけです (この投稿の後に続きます)。そして、ここに便利な例があります: Hibernate – 1 対 1 の例 (注釈)

于 2013-08-19T14:24:21.573 に答える