2016-04-21 2 views
0

Скажем, у меня есть таблица (T) столбцов: a1, a2, b1, b2, c1, c2Hibernate Virtual Map Key

@Entity 
class T { 
    @ElementCollection 
    @VirtualMapKey 
    Map<String, Foo> foos 
} 

@Embeddable 
class Foo { 
    String v1 
    String v2 
} 

Если я хочу, чтобы получить a1 поле экземпляра Т, то я могу вызвать t.foos['a'].v1. Интересно, могу ли я достичь этого с помощью Hibernate 5.1 или JPA 2.1. Помоги пожалуйста.

ответ

0

Ну, первый выстрел будет переработать ваши объекты:

@Entity 
class T { 
    @AttributeOverrides(value = { 
     @AttributeOverride(name = "v1", column = @Column(name = "a1")), 
     @AttributeOverride(name = "v2", column = @Column(name = "a2")) 
    }) 
    Foo a; 

    @AttributeOverrides(value = { 
     @AttributeOverride(name = "v1", column = @Column(name = "b1")), 
     @AttributeOverride(name = "v2", column = @Column(name = "b2")) 
    }) 
    Foo b; 


    @AttributeOverrides(value = { 
     @AttributeOverride(name = "v1", column = @Column(name = "c1")), 
     @AttributeOverride(name = "v2", column = @Column(name = "c2")) 
    }) 
    Foo c; 
} 

, а затем вы можете сделать это просто t.a.v1, t.a.v2, t.b.v1, t.b.v2 и т.д. Вы фиксированное количество столбцов в таблице - только отражают ее в отображении.