JPA对未拥有的关系有什么“期望”?

时间:2018-09-13 18:22:27

标签: hibernate jpa

我正在通过ProJPA2工作,目前在集合映射部分。 以下是wrt Maps的示例:

onetomany map

对我来说,这使文本难以理解。它提出了许多未解决的问题。其中之一是,如果我使用JPQL查询检索部门,应该如何填充employeesByCubicle地图?我了解使用“ mappedBy”本质上说:“我不负责维护这种关系:另一边是,您将在Employee实体的部门字段中找到该关系”。

但是,这不能满足以下问题:“如果检索Department的实例,应该如何填充employeeByCubicle?”

是否要由应用程序(即应用程序的开发人员)插入代码以手动填充关系另一端拥有的集合(例如employeeByCubicle)?在这种情况下,不能也不会希望仅通过从数据库中检索Department实体来填充employeeByCubicle映射:会是这种情况,因为该关系不属于Department?

谢谢。


编辑

我已经开始尝试实现本书中的示例,但是我不确定自己是否正确执行-我能够使小隔间/员工数据持久化,但是却出现“用于收集的空索引列”错误当我尝试使用“部门d的select d”检索它时,它会运行,并且除其他外,似乎尝试从EMPLOYEE表中提取数据:

 Exception in thread "main" org.hibernate.HibernateException: null index column for collection: x.y.jpa.entity.Department.employeesByCubicle

我尝试添加nullable = true,optional = true,没有任何效果。 在数据库中,CUB_ID列指定为CUB_ID varchar(255) DEFAULT NULL,这应该是它应该的-我希望此列可以为空。但是我无法使其工作,以便可以选择数据。我的映射有问题吗?

我的实体类别,员工和部门:

@Entity
public class Employee {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private int id;
    ...

    @Basic(optional=true)
    @Column(name="CUB_ID",nullable=true)
    String cubicle;
    ...
}


@Entity
public class Department {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private int id;
    ...
    @OneToMany(mappedBy="department")
    @MapKeyColumn(name="CUB_ID",nullable=true)
    private Map<String, Employee> employeesByCubicle;        
    ...
}    

MYSQL中的数据:

data


EDIT2

我开始认为我试图做的事情可能无法实现;如果是在Department中给定Map<String,Employee>,则JPA将转到Employee表并检索给定部门的所有雇员,然后为每个雇员提取隔间,然后尝试将条目放入用k=cubicleidv=employee来映射,那么也许没有办法告诉JPA,如果cubicleid为null,则不要尝试将条目放入映射中。 这种想法是对还是错? TIA。

0 个答案:

没有答案