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:
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