package cn.w3cschool.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;
}
下面的代碼來自Department.java。
package cn.w3cschool.common;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MapKey;
import javax.persistence.OneToMany;
@Entity
public class Department {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
@OneToMany(targetEntity=Employee.class, mappedBy="department")
@MapKey
private Map employees;
public Department() {
employees = new HashMap();
}
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 void addEmployee(Employee employee) {
employees.put(employee.getId(), employee);
if (employee.getDepartment() != null) {
employee.getDepartment().getEmployees().remove(employee.getId());
}
employee.setDepartment(this);
}
public Map getEmployees() {
return employees;
}
public String toString() {
StringBuffer aBuffer = new StringBuffer("Department ");
aBuffer.append(" id: ");
aBuffer.append(id);
aBuffer.append(" name: ");
aBuffer.append(name);
aBuffer.append(" employeeCount: ");
if(null != employees) {
aBuffer.append(employees.size());
}
return aBuffer.toString();
}
}
以下代碼來自Employee.java。
package cn.w3cschool.common;
import java.util.Map;
import java.util.Set;
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.MapKeyClass;
import javax.persistence.MapKeyColumn;
@Entity
public class Employee {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
private long salary;
@ElementCollection(targetClass=String.class)
@CollectionTable(name="EMP_PHONE")
@MapKeyColumn(name="PHONE_TYPE")
@MapKeyClass(String.class)
@Column(name="PHONE_NUM")
private Map 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 getPhoneNumbers() {
return phoneNumbers;
}
public void setPhoneNumbers(Map 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 : (Set<Map.Entry>)phoneNumbers.entrySet()) {
aBuffer.append(e.getKey() + "[" + e.getValue() + "] ");
}
return aBuffer.toString();
}
}
更多建議: