2016-02-22 182 views
1

我有以下情形:休眠@OneToMany内@Embeddable

@Entity 
class A { 
    @ElementCollection 
    private Set<B> setOfB; 
} 

@Embeddable 
class B{ 
    @OneToMany 
    private Set<C> setOfC; 
} 

@Entity 
class C{ 
    private String name; 
} 

this question看起来这是可行的,但是我收到以下错误。任何想法我做错了什么?

org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: A_setOfB, for columns: [org.hibernate.mapping.Column(setOfB.setOfC)] 

谢谢。

回答

2

Hibernate根据他们的手册在7.2.3. Collections of basic types and embeddable objects不可能。

但是,您不限于基本类型,集合类型可以是任何可嵌入的对象。要覆盖集合表中可嵌入对象的列,请使用@AttributeOverride注释。

@Entity 
public class User { 
    [...] 
    public String getLastname() { ...} 

    @ElementCollection 
    @CollectionTable(name="Addresses", [email protected] (name="user_id")) 
    @AttributeOverrides({ 
     @AttributeOverride(name="street1", [email protected](name="fld_street")) 
    }) 
    public Set<Address> getAddresses() { ... } 
} 

@Embeddable 
public class Address { 
    public String getStreet1() {...} 
    [...] 
} 

这样的嵌入对象不能包含一个集合本身。