这是我的“标题”实体:
@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);
为什么?
答案 0 :(得分:1)
是的,您必须致电row.setTestataDocumento(d);
,因为它是关系的拥有方。理想情况下,Documento中有一个addRow()
方法,可以添加要设置的行,还可以设置行的文档。
答案 1 :(得分:1)
是的,您必须,因为您有双向关联,并且该关联的所有者方是RigaDocumento。所有者方是没有mappedBy
属性的一方。另一边称为反面,并被JPA / Hibernate忽略。