You can make an Embedded class, which contains your two keys, and then have a reference to that class as EmbeddedId in your Entity.
You would need the @EmbeddedId and @Embeddable annotations.
@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 **/ }
Another way to achieve this task is to use @IdClass annotation, and place both your id in that IdClass. Now you can use normal @Id annotation on both the attributes
@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; }
@IdClassannotation, another tip I found is the@Columnannotation should go into the Entity class' fields (YourEntityin RohitJan's sample code).