Można dokonać Embedded class
, który zawiera swoje dwa klucze, a następnie mieć odniesienie do tej klasy jako EmbeddedId
w Entity
.
Będziesz potrzebować adnotacji @EmbeddedId
i @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 **/
}
Innym sposobem osiągnięcia tego zadania jest użycie @IdClass
adnotacji i umieść Zarówno id
w tym IdClass
. Teraz można korzystać z normalnego @Id
adnotacji na obu atrybutów
@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;
}
Czy można użyć '@ Generatedvalue' dla Id's by EmbeddedId – Kayser
@Kayser. O ile mi wiadomo. Nie. Musisz jawnie ustawić dla nich wartość w instancji KeyClass, a następnie ustawić tę instancję klasy klucza w swojej encji. –
@Kayser. '@ GeneratedValue' może być użyty tylko do wygenerowania kluczowych wartości klucza podstawowego, nie może generować kombinacji dla kluczy złożonych. –