Question

J'ai une table avec trois colonnes, "A", "B" et "C". Deux de ces colonnes (A et B) sont la clé primaire composite pour le tableau. J'ai écrit une classe Java pour ce tableau et j'utilise Hibernate pour cartographier les données de la classe aux données du tableau. J'ai créé une autre classe pour la touche intégrée (c'est-à-dire composite).

Les deux classes ressemblent à ceci:

@Entity
@Table(name="SOME_TABLE", schema="SOME_SCHEMA")
public class Outer {
    private Key key;
    private String a;
    private String b;
    private String c;

    @EmbeddedId
    public Key getId() {
        return this.key;
    }

    // Also a setter for Key...

    @Column(name="A")
    public String getA() {
        return this.a;
    }

    public void setA(final String a) {
        this.a = a;
    }

    // Also setters and getters for B and C.
}

.

@Embeddable
public class Key {
    private String a;
    private String b;

    @Column(name="A")
    public String getA() {
        return this.a;
    }

    public void setA(final String a) {
        this.a = a;
    }

    // Also a getter & setter for B.
}

Il semble que toutes les documents d'hibernate s'accompagnent de l'endroit où, exactement, les Getters et les Setters devraient aller. Les anciens de l'extérieur et de la clé devraient-ils avoir des valeurs pour les valeurs qui composent la clé composite? Si j'ai un secteur aux deux endroits, Hibernate fait-il la bonne chose (c'est-à-dire, définissez la valeur sur la clé) si je définis la valeur pour A sur extérieur? Devrait-il se reporter à outer.geta / b () et exter.seta / b () à la classe clé?

Je pense que c'est une mauvaise pratique de codage d'avoir des setters à deux endroits pour les mêmes données. C'est à tout le moins ambigu. J'espère que HiberNate définira les valeurs de la classe clé pour moi, mais j'aimerais savoir avec certitude. Merci!

-Joe

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top