Sie können eine Embedded class
, machen die Ihre zwei Schlüssel enthält, und dann einen Verweis als EmbeddedId
zu dieser Klasse haben.
Sie würden die @EmbeddedId
und @Embeddable
Anmerkungen benötigen.
@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 **/
}
Eine andere Möglichkeit, diese Aufgabe zu erreichen, ist @IdClass
Anmerkung zu verwenden, und legen Sie beide Ihre id
in diesem IdClass
. Jetzt können Sie normale @Id
Anmerkung auf beide verwenden die Attribute
@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;
}
Ist es möglich, '@ Generatedvalue' für Ids von EmbeddedId – Kayser
@ Kayser zu verwenden. Soweit ich weiss. Nein. Sie müssen den Wert für sie explizit in Ihrer KeyClass-Instanz festlegen und dann diese Schlüsselklasseninstanz in Ihrer Entität festlegen. –
@Kayser. '@ GeneratedValue' kann nur zum Generieren von Schlüsselwerten für einen Primärschlüssel verwendet werden, er kann keine Kombination für zusammengesetzte Schlüssel generieren. –