@OneToMany关系:“one”id没有持久化

时间:2013-01-01 17:40:43

标签: java hibernate java-ee jpa

这是我的“标题”实体:

@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);

为什么?

2 个答案:

答案 0 :(得分:1)

是的,您必须致电row.setTestataDocumento(d);,因为它是关系的拥有方。理想情况下,Documento中有一个addRow()方法,可以添加要设置的行,还可以设置行的文档。

答案 1 :(得分:1)

是的,您必须,因为您有双向关联,并且该关联的所有者方是RigaDocumento。所有者方是没有mappedBy属性的一方。另一边称为反面,并被JPA / Hibernate忽略。