Hibernate Mapping Entity with multiple primary key

Today i want to share about Hibernate Mapping Entity with multiple primary key. For some reason we need to add multiple key in our database table, for example: you have table S_PARAMETER that will save all updatable parameter in your system and for some reason(easy read, clean code) you nedd param_group, and param_id field to get the value. And how hibernate mapping can achieve that?

First, the table structure is like this:

Hibernate Mapping Entity with multiple primary key

And you need to create entity class to map table datas into your class domain/pojo.
Because Hibernate only accept one ID in your pojo class, so in this post, i will use Embeddable class that will save the multiple key. Here it is:

[java]
package com.didikhari.model;

import java.io.Serializable;

import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;

import org.hibernate.annotations.DynamicUpdate;
import org.hibernate.annotations.SelectBeforeUpdate;

@Entity
@Table(name = “S_PARAMETER”)
@SelectBeforeUpdate
@DynamicUpdate
public class Parameter implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
@AttributeOverrides(value={
@AttributeOverride(name=”paramGroup”, column = @Column(name = “PARAM_GROUP”)),
@AttributeOverride(name=”paramId”, column = @Column(name = “PARAM_ID”))
})
private ParamKey paramKey;
@Column(name = “DESCRIPTION”)
private String description;
@Column(name = “VALUE”)
private String value;
@Column(name = “ORDINAL”)
private int ordinal;

public String getParamGroup(){
return paramKey.getParamGroup();
}

public String getParamId(){
return paramKey.getParamId();
}

public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public int getOrdinal() {
return ordinal;
}
public void setOrdinal(int ordinal) {
this.ordinal = ordinal;
}

public ParamKey getParamKey() {
return paramKey;
}

public void setParamKey(ParamKey paramKey) {
this.paramKey = paramKey;
}
}

@Embeddable
class ParamKey implements Serializable{
private static final long serialVersionUID = 1L;
private String paramGroup;
private String paramId;

public String getParamGroup() {
return paramGroup;
}
public void setParamGroup(String paramGroup) {
this.paramGroup = paramGroup;
}
public String getParamId() {
return paramId;
}
public void setParamId(String paramId) {
this.paramId = paramId;
}
}

[/java]

We need to use AttributeOverrides annotation, for map the ParamKey properties (paramGroup and paramId) to the database table column (PARAM_GROUP, PARAM_ID).
Thats all we need to do to make hibernate mapping work for mutiple key field.
Hope this post about Hibernate Mapping Entity with multiple primary key

Leave a Reply

Your email address will not be published. Required fields are marked *