【问题标题】:Hibernate one to many insert休眠一对多插入
【发布时间】:2013-01-18 17:24:24
【问题描述】:

如您所见,我有两张桌子(优惠、商品) 我在插入项目时遇到问题,每次我添加优惠时它都不会插入项目列表。 Offer 包含一个项目列表。 这是我的代码:

报价:

@Entity
public class Offer{

@Id
@GeneratedValue
int id;
private String name;
private String description;

@OneToMany(mappedBy="offer")
private List<Item> items;
//getters and setters

项目:

@Entity
public class Item{

@Id
@GeneratedValue
int idItem;
private String name;
private double price;

@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="idOffer")
private Offer offer;
 // getters and setters

这是填写表格的代码:

    Offer offer=GenerateData.generateOffer();
    List<Item> items=new ArrayList<>();
    for(int i=0;i<3;i++){
        Item item=GenerateData.generateItem();
        items.add(item);
        item.setOffer(offer);
    }
    offer.setItems(items);

    pDB.addOffer(offer);//DAO for adding Offers into DB

优惠已成功添加,但商品未成功添加。映射有问题吗?

【问题讨论】:

    标签: java hibernate hibernate-mapping


    【解决方案1】:

    您是否尝试在 OneToMany 端放置级联选项?

    【讨论】:

    • 是的,我添加了,它正在工作。我两边都有级联选项可以吗?
    • 级联选项通过可达性定义保存/删除,所以如果你保存了一个项目并期望它的报价也会更新,那么你需要在那里进行级联。但是,如果 offer 对象已经是托管 bean,则情况并非如此。
    • 有没有办法让 IdOffer 不为空如果不设置 (item.setOffer(offer);)?
    【解决方案2】:

    优惠

     @OneToMany(cascade = { CascadeType.ALL }, orphanRemoval = true, mappedBy = "offer")
    private List<Item> items;
    

    项目:

    @ManyToOne
    @JoinColumn(name="idOffer")
    private Offer offer;
    

    【讨论】:

      猜你喜欢
      • 2021-07-28
      • 2021-11-29
      • 2011-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 2013-08-29
      相关资源
      最近更新 更多