2015-08-08 121 views
0

删除从映射表中的数据我有2个实体中有一个是头,另一种是项目无法休眠

头有很多项目

页眉代码如下

@Entity 
public class Headertable { 

    @Id 
    @GeneratedValue 
    private int headerId; 

    private String headerText; 

    @OneToMany(mappedBy="itemId.header",cascade=CascadeType.ALL,fetch=FetchType.EAGER) 
    private List<Items> items = new ArrayList<Items>(); 
    ... 
    getter and setters for these 

和项目表如下

@Entity 
public class Items { 

    @EmbeddedId 
    private ItemId itemId; 

    private String itemData; 
    .... getter and setters for these 

商品表id类

@Embeddable 
public class ItemId implements Serializable{ 

    @ManyToOne 
    private Headertable header; 

    private int itemId; 
    ...setter and getters 

下面是测试代码从邮件头中删除一个项如下

Session session = this.sessionFactory.openSession(); 
    session.beginTransaction(); 
    Headertable header = (Headertable) session.get(Headertable.class, 1); 

    Iterator<Items> iterator = header.getItems().iterator(); 
    while(iterator.hasNext()) 
    { 
     Items items = iterator.next(); 
     if(items.getItemData().equals("chiru")) 
     { 
     iterator.remove(); 
     } 
    } 
    session.saveOrUpdate(header); 
    Transaction transaction = session.getTransaction(); 
    transaction.commit(); 

回答

0

你必须删除的项目:

session.delete(items);

卸下从逆侧的基准如果不使用orphanRemoval,则不会影响保存的数据。

+0

org.hibernate.MappingException:未知实体:org.hibernate.collection.internal.PersistentBag它引发此异常 – chiranjeevigk

+0

不是集合,而是'Items'类型的变量'items'。 –