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:
<code class="java">@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 }</code>
Using @IdClass
Alternatively, annotate the class with @IdClass and define the ID attributes as @Id within the class:
<code class="java">@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; }</code>
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:
<code class="java">YourEntity newVersion = new YourEntity(); newVersion.setMyKey(new MyKey(1, 1)); // new version newVersion.setColumnA("Some Other Data"); entityManager.persist(newVersion);</code>
The above is the detailed content of How to Implement Data Versioning with Composite Primary Keys in JPA?. For more information, please follow other related articles on the PHP Chinese website!