Si può fare un Embedded class
, che contiene i due tasti, e poi hanno un riferimento a tale classe come EmbeddedId
nel vostro Entity
.
Avresti bisogno delle annotazioni @EmbeddedId
e @Embeddable
.
@Entity
public class YourEntity {
@EmbeddedId
private MyKey myKey;
@Column(name = "ColumnA")
private String columnA;
/** Your getters and setters **/
}
@Embeddable
public class MyKey implements Serializable {
@Column(name = "Id", nullable = false)
private int id;
@Column(name = "Version", nullable = false)
private int version;
/** getters and setters **/
}
Un altro modo per realizzare questo compito è quello di utilizzare @IdClass
annotazioni, e posizionare sia il id
in quel IdClass
. Ora è possibile utilizzare il normale @Id
annotazioni su entrambi gli attributi
@Entity
@IdClass(MyKey.class)
public class YourEntity {
@Id
private int id;
@Id
private int version;
}
public class MyKey implements Serializable {
private int id;
private int version;
}
fonte
2012-10-23 14:42:10
È possibile utilizzare '@ Generatedvalue' per Id's di EmbeddedId – Kayser
@Kayser. Per quanto ne so. No. Devi impostare esplicitamente il valore per loro nell'istanza KeyClass, quindi impostare l'istanza della classe chiave nell'entità. –
@Kayser. '@ GeneratedValue' può essere utilizzato solo per generare valori chiave per una chiave primaria, non può generare combinazioni per chiavi composite. –