2012-01-22 46 views
1

我有类(实体)A其中包含对象(实体)B其中包含Set<String> strings的列表。@ElementCollection未保存Hibernate 4.0.1

@Entity 
@Table(name = "a") 
public class A { 

    private int id; 
    private List<B> bList; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "aId") 
    public int getId() { 
     return id; 
    } 

    @OneToMany(fetch = FetchType.EAGER) 
    @JoinColumn(name = "aId", nullable = false) 
    @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE}) 
    public List<B> getBList() { 
     return bList; 
    } 
    ... setters and other stuff 
} 

@Entity 
@Table(name = "b") 
public class B { 

    private int id; 
    private int aId; 
    private Set<String> strings; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "bId") 
    public int getId() { 
     return id; 
    } 

    @ElementCollection(fetch = FetchType.EAGER) 
    @CollectionTable(name = "b_strings", joinColumns = {@JoinColumn(name = "bId")}) 
    @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})** 
    public Set<String> getStrings() { 
     return strings; 
    } 

    @Column(name = "aId", insertable = false, updatable = false) 
    public int getAId() { 
     return aId; 
    } 
    ... setters and other stuff 
} 

我创建对象A,然后我尝试将其保存:

A a = new A(); 
List<B> l = new ArrayList<B>(); 
a.setBList(l); 
B b = new B(); 
l.add(b); 
b.setStrings(new HashSet<String>()); 
b.getStrings().add("1"); 
b.getStrings().add("2"); 

b = new B(); 
l.add(b); 
b.setStrings(new HashSet<String>()); 
b.getStrings().add("3"); 

Session session = sessionFactory.openSession(); 
session.saveOrUpdate(a); 
session.close(); 

AB对象被保存(插入),但strings设置不会被保存。我使用Spring 3.1和Hibernate 4.0.1。为什么休眠忽略@ElementCollection?表创建后,mysql workbech将其显示为只读...

回答

1

映射没问题。我是盲人,session.beginTransaction();和session.getTransaction()。commit();在保存对象时丢失。