SQL JPA - Multiple columns as primary key
If i want severeal Column to make up an ID.
SQL example :
CONSTRAINT [PK_NAME] PRIMARY KEY ([Column1],[Column2],[Column3])
How can i do that with a Jpa Entity class ? through columndefinition ?
just setting the id field as:
value = Column1 + Column2 + Column3 // aint working.
You need to have a class for your composite key:
public class CompositeKey implements Serializable {
private int column1;
private int column2;
private int column3;
}
and then in your entity class use the @IdClass
annotation:
@Entity
@IdClass(CompositeKey.class)
public class EntityExample {
@Id
private int column1;
@Id
private int column2;
@Id
private int column3;
...
...
}
I think this should work. Hope it helps, cheers!
Yea and there is the other solution, the one that @jklee mentioned, both work, it's a matter of preference.
Use @Embeddable
and @EmbeddedId
.
Example:
@Entity
public class Project implements Serializable {
@EmbeddedId ProjectId id;
}
@Embeddable
class ProjectId implements Serializable {
int departmentId;
long projectId;
}
More information here http://www.objectdb.com/java/jpa/entity/id#Embedded_Primary_Key_
If all fields in the class are part of primary key, then solution would be pretty simple (extending solution provided by @raul-cuth):
@Entity
@IdClass(EntityExample.class)
public class EntityExample implements Serializable {
@Id
private int column1;
@Id
private int column2;
@Id
private int column3;
}