The following section shows how to map a Java java.util.Map to database table.
The following code is from Employee.java.
package com.java2s.common; import java.util.Map; import javax.persistence.CollectionTable; import javax.persistence.Column; import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.MapKeyColumn; @Entity public class Employee { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; private String name; private long salary; @ElementCollection @CollectionTable(name="EMP_PHONE") @MapKeyColumn(name="PHONE_TYPE") @Column(name="PHONE_NUM") private Map<String, String> phoneNumbers; @ManyToOne private Department department; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public long getSalary() { return salary; } public void setSalary(long salary) { this.salary = salary; } public Department getDepartment() { return department; } public void setDepartment(Department department) { this.department = department; } public Map<String, String> getPhoneNumbers() { return phoneNumbers; } public void setPhoneNumbers(Map<String, String> phoneNumbers) { this.phoneNumbers = phoneNumbers; } public String toString() { StringBuffer aBuffer = new StringBuffer("Employee "); aBuffer.append(" id: "); aBuffer.append(id); aBuffer.append(" with dept: "); if(null != department) { aBuffer.append(department.getName()); } aBuffer.append(" phoneNumbers: "); for (Map.Entry e : phoneNumbers.entrySet()) { aBuffer.append(e.getKey() + "[" + e.getValue() + "] "); } return aBuffer.toString(); } }
Here is the database table dump.
Table Name: DEPARTMENT Row: Column Name: ID, Column Type: INTEGER: Column Value: 1 Column Name: NAME, Column Type: VARCHAR: Column Value: test Table Name: EMPLOYEE Row: Column Name: ID, Column Type: INTEGER: Column Value: 1 Column Name: NAME, Column Type: VARCHAR: Column Value: Tom Column Name: SALARY, Column Type: BIGINT: Column Value: 0 Column Name: DEPARTMENT_ID, Column Type: INTEGER: Column Value: 1 Table Name: EMP_PHONE