Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要使用Map和@MapKeyColumn了解@oneToMany吗_Java_Jpa_Jpa 2.0 - Fatal编程技术网

Java 需要使用Map和@MapKeyColumn了解@oneToMany吗

Java 需要使用Map和@MapKeyColumn了解@oneToMany吗,java,jpa,jpa-2.0,Java,Jpa,Jpa 2.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 (s

这是我的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
)
在这里,我们在员工和部门之间建立了一种一对多的关系结构,其中许多员工可以属于一个部门

现在,这里是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;
    ...
    ..
}
@实体
@表(name=“TBL\U部门\U一”)
公共类DepartmentEntityOne实现可序列化{
公共部门EntityOne(){}
公共部门EntityOne(字符串名称){
this.deptName=名称;
}
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“ID”)
私有整数deptId;
@列(name=“name”)
私有字符串deptName;
@OneToMany(cascade={CascadeType.MERGE,
CascadeType.PERSIST},
fetch=FetchType.LAZY,mappedBy=“department”)
@MapKeyColumn(name=“xxxxx”)
私人Map员工;
...
..
}
这是我主要测试方法中的代码

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);
DepartmentEntityOne deptOne=新的DepartmentEntityOne(“机械工程”);
Map empMap=newhashmap();
EmployeeEntityThree[]数组=新EmployeeEntityThree[]{
新员工实体三(“Amar”、“900000001”、deptOne),
新员工实体三(“Akbar”、“900000002”、deptOne),
新员工实体三(“安东尼”,“900000003”,德普顿)
};
put(数组[0].getMobileNo(),数组[0]);
put(数组[1].getMobileNo(),数组[1]);
put(数组[2].getMobileNo(),数组[2]);
SETEMPLOYES(empMap);
em=emf.createEntityManager();
em.persist(deptOne);
代码可以正常工作,所有插入都成功完成

现在我的问题是实体部门 其中,is使用了@MapKeyColumn(name=“xxxx”),其中“xxxx”是一些垃圾值, 这里应该是什么名字=? 因为在此之前,它是name=“mobileNo”,这是雇员实体中的属性。 这也奏效了


那么@MapKetColumn(name=?)的实际值应该是什么呢?

您应该参考
Employee
表的
name

@MapKeyColumn(name="NAME")
private Map<String,EmployeeEntityThree> employees;
@MapKeyColumn(name=“name”)
私人Map员工;

但是如果我把id作为name值,它指的是员工实体的自动生成id,所以在测试时,我只能插入一个员工,即使我在HashMap()中输入了3个员工信息,@Rahul Shivsharan,哇,这很有意义,然后切换到name列,它需要是employee.means上的一列,Employee表中的任何列在其java映射中都包含唯一的哈希代码,对吗?