Search code examples
javajpaannotationscompound-key

Compound keys in JPA


I want to make an entity that has an autogenerated primary key, but also a unique compound key made up of two other fields. How do I do this in JPA?
I want to do this because the primary key should be used as foreign key in another table and making it compound would not be good.

In the following snippet, I need the command and model to be unique. pk is of course the primary key.

@Entity
@Table(name = "dm_action_plan")
public class ActionPlan {
    @Id
    private int pk;
    @Column(name = "command", nullable = false)
    private String command;
    @Column(name = "model", nullable = false)
    String model;
}

Solution

  • You can use @UniqueConstraint something like this :

    @Entity
    @Table(name = "dm_action_plan",
           uniqueConstraints={ @UniqueConstraint(columnNames= "command","model") } )
    public class ActionPlan {
        @Id
        private int pk;
    
        @Column(name = "command", nullable = false)
        private String command;
    
        @Column(name = "model", nullable = false)
        String model;
    }
    

    This will allow your JPA implementation to generate the DDL for the unique constraint.