2016-02-22 3 views
1

У меня есть следующий сценарий:Hibernate @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() {...} 
    [...] 
} 

Такой встраиваемый объект не может сам содержит коллекцию.

Смежные вопросы