Domanda

Ho una tabella con tre colonne, "A", "B" e "C". Due di queste colonne (A e B) sono la chiave primaria composita per la tabella. Ho scritto una classe Java per questa tabella e sto usando Hibernate per mappare i dati nella classe ai dati nella tabella. Ho creato un'altra classe per la chiave incorporata (cioè composita).

Le due classi sembrano così:

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

Sembra che tutta la documentazione in letargo lucente su dove, esattamente, i getter e i setter dovrebbero andare. Sia esterni che chiave dovrebbero avere setter per i valori che compongono la chiave composita? Se ho un setter in entrambi i luoghi, Hibernate fa la cosa giusta (cioè impostare il valore sulla chiave) Se imposto il valore per A on esterno? Outer.geta/b () e esterno.seta/b () dovrebbe rinviare alla classe chiave?

Penso che sia una cattiva pratica di codifica avere setter in due posti per gli stessi dati. È almeno ambiguo. Spero che Hibernate imponesse i valori sulla classe chiave per me, ma mi piacerebbe saperlo per certo. Grazie!

-joe

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top