在JPA中,我们可以将通用类型的Map映射到数据库。
以下代码定义了一个通用映射,其键值为Employee,值类型为Integer。
@ElementCollection @CollectionTable(name="EMP_SENIORITY") @MapKeyJoinColumn(name="EMP_ID") @Column(name="SENIORITY") private Map<Employee, Integer> seniorities;
下面的代码来自Department.java。
package cn..common; import java.util.HashMap; 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.MapKeyJoinColumn; @Entity public class Department { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; private String name; @ElementCollection @CollectionTable(name="EMP_SENIORITY") @MapKeyJoinColumn(name="EMP_ID") @Column(name="SENIORITY") private Map<Employee, Integer> seniorities; public Department() { seniorities = new HashMap<Employee, Integer>(); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String deptName) { this.name = deptName; } public Map<Employee, Integer> getEmployees() { return seniorities; } public void setEmployeeSeniority(Employee employee, int seniority) { seniorities.put(employee, seniority); } public void removeEmployee(Employee employee) { seniorities.remove(employee); } public String toString() { StringBuffer aBuffer = new StringBuffer("Department "); aBuffer.append(" id: "); aBuffer.append(id); aBuffer.append(" name: "); aBuffer.append(name); aBuffer.append(" employeeCount: "); aBuffer.append(seniorities.size()); return aBuffer.toString(); } }
下面的代码来自PersonDaoImpl.java。
package cn..common; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.springframework.transaction.annotation.Transactional; @Transactional public class PersonDaoImpl { public void test() { Employee e = new Employee(); e.setName("Tom"); Department d = new Department(); d.setName("test"); d.getEmployees().put(e, e.getId()); em.persist(e); em.persist(d); } @PersistenceContext private EntityManager em; }下载 ElementCollection_MapKeyEntity.zip
这里是数据库表转储。
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 Table Name: EMP_SENIORITY Row: Column Name: DEPARTMENT_ID, Column Type: INTEGER: Column Value: 1 Column Name: SENIORITY, Column Type: INTEGER: Column Value: 0 Column Name: EMP_ID, Column Type: INTEGER: Column Value: 1
JPA教程 -JPA嵌入式共享示例对于嵌入式实体,我们可以在不同实体之间共享它们。当嵌入它时,我们也可以覆盖可嵌入的实体。以下代...
JPA教程 -JPA 一对一映射示例本节介绍如何在JPA映射中执行一对一映射。此示例假设一个人只能是一个部门的一部分,而一个部门只能...
JPA教程 -JPA双向多对多映射示例以下代码显示如何创建双向多对多映射。例子以下代码来自Professor.java。package cn..common;imp...
JPA教程 -JPA多对一连接列示例以下代码标记了在多对一映射中使用的连接列。@ManyToOne (cascade=CascadeType.ALL)@JoinColumn(na...