我正在使用JPA开发我的第一个应用程序。在那里,我要求父对象具有子对象列表,并且该列表不单独输入到其表中。
以下是我的实体。
招标: -
@Entity
@Table(name = "tender")
public class Tender {
@Id
@Column(name = "tender_id", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "name")
private String name;
@Column(name = "description")
private String description;
// what are the annotations here?
private List<TenderAddress> addresses;
// constructors
// getters ans setters
}
投标地址: -
@Entity
@Table(name = "tender_address")
public class TenderAddress {
@Id
@Column(name = "id", unique = true, nullable = false)
@GeneratedValue
private long id;
// what are the annotations here?
private Tender tender;
@Column(name = "address", nullable = false)
private String address;
// constructors
//getters and setters
}
我使用招标的setter方法为招标对象设置地址。这就是我将Tender对象保存到数据库的方法。我使用实体管理器。
@Transactional
public Tender saveNewTender(Tender tender) {
entityManager.persist(tender);
entityManager.flush();
return tender;
}
我需要的是同时保存Address实体和地址表以引用封装特定地址的招标对象。
我尝试使用@JoinColumn
和@OneToMany(mappedBy="tender", cascade = CascadeType.ALL)
进行双向一对多映射。但它将引用列标记为NULL(地址表中的招标id字段)
现在我的问题是,我的要求是否有效?我是否必须先保留招标对象并获取它的ID然后保留Address对象?
如果我的要求有效,我该如何实施?你能推荐我什么?请提供我在实体中需要的注释。