2016-04-21 19 views
0

Sagen wir, ich habe eine Tabelle (T) der Spalten: a1, a2, b1, b2, c1, c2Hibernate Virtuelle Karte Schlüssel

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

@Embeddable 
class Foo { 
    String v1 
    String v2 
} 

Wenn ich a1 Feld der T-Instanz erhalten wollen, dann kann ich t.foos['a'].v1 aufrufen. Ich frage mich, ob ich dies mit Hibernate 5.1 oder JPA 2.1 erreichen kann. Hilfe bitte.

Antwort

0

Nun, würde erster Schuss Ihre Einheiten zu überarbeiten:

@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; 
} 

und dann können Sie diese einfach tun t.a.v1, t.a.v2, t.b.v1, t.b.v2 usw. Sie haben feste Anzahl von Spalten in der Tabelle - es ist nur in der Abbildung reflektieren.

Verwandte Themen