我正在使用 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;
}
我需要的是同时保存地址实体和地址表以引用封装特定地址的投标对象。
@JoinColumn
我尝试使用and进行双向一对多映射@OneToMany(mappedBy="tender", cascade = CascadeType.ALL)
。但它将引用列标记为 NULL(地址表中的投标 id 字段)
现在我的问题是,我的要求有效吗?我是否必须先保留招标对象并获取它的 ID,然后再保留 Address 对象?
如果我的要求是有效的,我怎样才能实现它?你能给我推荐什么?请在我的实体中提供我需要的注释。