0
@OneToMany一些輕這是我的SQL表結構,需要使用地圖和@MapKeyColumn
create table TBL_DEPARTMENT_ONE(
ID integer primary key generated always as identity (start with 50, increment by 1),
name varchar(100)
)
create table TBL_EMPLOYEE_THREE(
ID integer primary key generated always as identity (start with 100, increment by 1),
name varchar(100),
dept_ID integer references TBL_DEPARTMENT_ONE
)
在這裏,我們心中已經做了一結構,以員工和部門之間有許多關係,許多員工可以屬於一個部門,
現在,這裏是JPA映射代碼如下, 員工,
@Entity
@Table(name="TBL_EMPLOYEE_THREE")
public class EmployeeEntityThree implements Serializable{
public EmployeeEntityThree(){}
public EmployeeEntityThree(String name,String mobileNo,DepartmentEntityOne dept){
this.empName = name;
this.department = dept;
this.mobileNo = mobileNo;
}
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID")
private Integer employeeId;
@Column(name="MOBILE_NO")
private String mobileNo;
@ManyToOne(cascade={CascadeType.PERSIST,
CascadeType.MERGE},
fetch= FetchType.LAZY,targetEntity=DepartmentEntityOne.class)
@JoinColumn(name="DEPT_ID")
private DepartmentEntityOne department;
.....
...
}
下面的代碼是部門實體,
@Entity
@Table(name="TBL_DEPARTMENT_ONE")
public class DepartmentEntityOne implements Serializable{
public DepartmentEntityOne(){ }
public DepartmentEntityOne(String name){
this.deptName = name;
}
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID")
private Integer deptId;
@Column(name="NAME")
private String deptName;
@OneToMany(cascade= { CascadeType.MERGE,
CascadeType.PERSIST},
fetch= FetchType.LAZY,mappedBy="department")
@MapKeyColumn(name="xxxxx")
private Map<String,EmployeeEntityThree> employees;
...
..
}
這是我測試的主要方法的代碼,
DepartmentEntityOne deptOne = new DepartmentEntityOne("Mechanical Engineering");
Map<String,EmployeeEntityThree> empMap = new HashMap<String,EmployeeEntityThree>();
EmployeeEntityThree[] array = new EmployeeEntityThree[]{
new EmployeeEntityThree("Amar","9000000001",deptOne),
new EmployeeEntityThree("Akbar","9000000002",deptOne),
new EmployeeEntityThree("Anthony","9000000003",deptOne)
};
empMap.put(array[0].getMobileNo(),array[0]);
empMap.put(array[1].getMobileNo(),array[1]);
empMap.put(array[2].getMobileNo(),array[2]);
deptOne.setEmployees(empMap);
em = emf.createEntityManager();
em.persist(deptOne);
代碼工作正常順利進行
現在我的問題的所有插入是實體部門 在哪裏已經使用@MapKeyColumn(name =「xxxx」),其中「xxxx」是一些垃圾值, 這裏應該是什麼名字=? ,因爲在此之前它是名稱=「mobileNo」,這是Employee實體中的屬性。 這也工作。
那麼768,16是@MapKetColumn的actualy vaue(名稱=?)
但如果我把ID名稱值,它指的是自動生成員工實體的標識,所以在測試時我只能只插入一個emplyee即使我把3員工信息中的HashMap(), – 2013-03-20 10:24:20
@Rahul Shivsharan,譁衆取寵,然後切換到名稱列,它需要成爲員工列。 – 2013-03-20 10:27:08
的意思是,Employee表中的任何一列在其Java映射中保存唯一的哈希碼,對吧? – 2013-03-20 10:30:09