0

これは私のSQLテーブル構造です。

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
)

ここでは、多くの従業員が 1 つの部門に属することができる、従業員と部門の間の 1 対多の関係の構造を作成しました。

さて、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" はガベージ値です。これより前は、Employee エンティティのプロパティである name = "mobileNo" だったためです。これもうまくいきました。

では、@MapKetColumn(name= ?) の実際の値は何でしょうか?

4

1 に答える 1

1

name表の欄を参照してEmployeeください。

@MapKeyColumn(name="NAME")
private Map<String,EmployeeEntityThree> employees;
于 2013-03-20T10:00:45.170 に答える