映射JPA中的子对象列表 - 一对多

时间:2017-02-08 08:39:37

标签: hibernate jpa entitymanager jpa-annotations

我正在使用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对象?

如果我的要求有效,我该如何实施?你能推荐我什么?请提供我在实体中需要的注释。

0 个答案:

没有答案