Composite Primary Key Handling with JPA
Data versioning requires the ability to duplicate an entity with different versions, making it essential to create a composite primary key for entities.
Entity Definition with Composite Primary Key
In JPA, composite primary keys can be defined using either the @EmbeddedId or @IdClass annotations.
Using @EmbeddedId
Define a separate class (@Embeddable annotated) for the key, and then annotate it with @EmbeddedId in the entity:
@Entity
public class YourEntity {
@EmbeddedId
private MyKey myKey;
private String columnA;
// getters and setters
}
@Embeddable
public class MyKey implements Serializable {
private int id;
private int version;
// getters and setters
}
Using @IdClass
Alternatively, annotate the class with @IdClass and define the ID attributes as @Id within the class:
@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;
}
Duplicating Entities with Versions
Once the entity is defined, it can be duplicated with a new version. For example, to create a new version of the first entity with id=1:
YourEntity newVersion = new YourEntity();
newVersion.setMyKey(new MyKey(1, 1)); // new version
newVersion.setColumnA("Some Other Data");
entityManager.persist(newVersion);
Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.
Copyright© 2022 湘ICP备2022001581号-3