0

これは私の「ヘッダー」エンティティです:

@Entity
@Table(name = "documenti")
@Inheritance(strategy=InheritanceType.JOINED)
public class Documento implements Serializable {

    @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;

    @OneToMany(
        mappedBy="testataDocumento",
        cascade=CascadeType.ALL,
        fetch=FetchType.LAZY
    )
    private Set<RigaDocumento> righe= new HashSet<RigaDocumento>();

//...
}

これらは「行」です。

@Entity
@Table(name="righe_documenti")
public class RigaDocumento implements Serializable {

@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @ManyToOne
    private Documento testataDocumento;

//...
}

さて、私は一般的な状況を持っています:

Documento d = new Documento();
// various Documento settings
List<RigaDocumento> rows;
// creation of rows
d.setRighe( rows );

次に、 dを永続化します。

ヘッダーは正しく保持され、行も保持されますが...

行レコードの「testataDocumento_id」フィールド (関係の「一」側のキー) は NULL です。

次のことを行う必要がありますか?

row.setTestataDocumento(d);

?

どうして??

4

2 に答える 2

1

はい、row.setTestataDocumento(d);それは関係の所有側であるため、電話する必要があります。理想的には、addRow()設定する行を追加し、行のドキュメントも設定するメソッドを Documento に用意します。

于 2013-01-01T17:43:02.760 に答える
1

はい、双方向の関連付けがあり、関連付けの所有者側が RigaDocumento であるため、そうする必要があります。mappedBy所有者側は、属性を持たない側です。反対側は逆側と呼ばれ、JPA/Hibernate では無視されます。

于 2013-01-01T17:43:33.803 に答える