2013-03-01 1 views
4

Могу ли я использовать @Embedded в классе @Embeddable в спящем режиме.Использование @Embedded в классе @Embeddable

Пример: A - это коллекция элементов в классе diffirent.

@Embeddable 
class A { 

    @Embedded 
    B b; 
} 

@Embeddable 
class B { 

    @Embedded 
    C c; 
} 


@Embeddable 
class C { 

    @Embedded 
    D D; 
} 

@Embeddable 
class D { 



} 

Это что-то в этом роде действителен в спящем режиме? Третий уровень гнездования.

ответ

4

Да, в Hibernate допустимо вложить объекты @Embedded.

Непосредственно из документации (http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#d0e714):

@Entity 
public class Person { 

    @Embedded 
    Address homeAddress; 
}   

@Embeddable 
public class Address { 

    @Embedded 
    Country nationality; 
}    

@Embeddable 
public class Country { 
    ... 
}  

(Удален дополнительный код, чтобы выделить вложенности @Embedded)

+0

Я могу получить до второго уровня вложенности третьего уровня вложенности действует , Моя проблема в том, что я не могу переименовать параметры уровня thrid с атрибутом столбцов. Спасибо за ответ ! –

+0

Хмм, имена ваших колонок дублируются? –

+0

Нет, они отличаются в классе D –

1

Как отметил johncarl, это возможно. Чтобы переименовать вложенные атрибуты, вы должны указать всю цепочку, используя '.' как разделитель. Например, если класс D имеет атрибут Foo, то в классе А вам нужно будет переименовать его как таковой:

@Embedded 
@AttributeOverride(name = "c.D.foo", column = @Column(name = "bar")) 
B b; 
Смежные вопросы