Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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 JPA2.1在Hibernate中命名子图忽略子类_Java_Spring_Hibernate_Jpa_Jpa 2.1 - Fatal编程技术网

Java JPA2.1在Hibernate中命名子图忽略子类

Java JPA2.1在Hibernate中命名子图忽略子类,java,spring,hibernate,jpa,jpa-2.1,Java,Spring,Hibernate,Jpa,Jpa 2.1,我使用的是Hibernate 4.3.8.FINAL,并且有以下模型,其中一个部门有很多员工,一个员工可以是经理 雇员实体: @Entity @Table(name = "employee", schema = "payroll") @Inheritance(strategy = InheritanceType.JOINED) public class Employee { @Id private Long id; @Basic(optional = false)

我使用的是Hibernate 4.3.8.FINAL,并且有以下模型,其中一个部门有很多员工,一个员工可以是经理

雇员实体:

@Entity
@Table(name = "employee", schema = "payroll")
@Inheritance(strategy = InheritanceType.JOINED)
public class Employee
{
    @Id
    private Long id;

    @Basic(optional = false)
    @Column(name = "name")
    private String name;

    @JoinColumn(name = "department_id", referencedColumnName = "id")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Department department;
}
管理人实体:

@Entity
@Table(name = "manager", schema = "payroll")
@Inheritance(strategy = InheritanceType.JOINED)
@PrimaryKeyJoinColumn(name = "employee_id", referencedColumnName = "id")
public class Manager extends Employee
{
    @Basic(optional = false)
    @Column(name = "car_allowance")
    private boolean carAllowance;
}
新闻部实体:

@NamedEntityGraph(
        name = "Graph.Department.FetchManagers",
        includeAllAttributes = false,
        attributeNodes = {
                @NamedAttributeNode(value = "name"),
                @NamedAttributeNode(value = "employees", subgraph = "FetchManagers.Subgraph.Managers")
        },
        subgraphs = {
                @NamedSubgraph(
                        name = "FetchManagers.Subgraph.Managers",
                        type = Employee.class,
                        attributeNodes = {
                                @NamedAttributeNode(value = "name")
                        }
                ),
                @NamedSubgraph(
                        name = "FetchManagers.Subgraph.Managers",
                        type = Manager.class,
                        attributeNodes = {
                                @NamedAttributeNode(value = "carAllowance"),
                        }
                )
        }
)
@Entity
@Table(name = "department", schema = "payroll")
public class Department
{

    @Id
    private Long id;

    @Basic(optional = false)
    @Column(name = "name")
    private String name;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "department", fetch = FetchType.LAZY)
    private Set<Employee> employees;
}

根据我的理解,@NamedSubgraph.type应该用于指定要获取的实体子类属性。是否可能Hibernate忽略了@NamedSubgraph注释的type=Manager.class属性,或者我遗漏了什么?

这可能是Hibernate 4.3.8.FINAL的缺陷,例如,EclipseLink 2.5.1在使用
子图时不会引发异常

无论如何,如果是
管理器
类型,则在指定
子类子图
而不是
子类
时,它应该可以工作,即:

@NamedEntityGraph(
name=“Graph.Department.FetchManagers”,
includeAllAttributes=false,
属性节点={
@NamedAttributeNode(value=“name”),
@NamedAttributeNode(value=“employees”,subgraph=“FetchManagers.subgraph.Managers”)
},
子图={
@命名子图(
name=“FetchManagers.Subgraph.Managers”,
类型=Employee.class,
属性节点={
@NamedAttributeNode(value=“name”)
}
)
},
子类子图={
@命名子图(
name=“FetchManagers.Subgraph.Managers”,
type=Manager.class,
属性节点={
@NamedAttributeNode(value=“carAllowance”),
}
)
}
)

我在另一个问题中遇到了嵌套子图的另一个问题。如果你也能看一看,我将不胜感激。
Unable to locate Attribute  with the the given name [carAllowance] on this ManagedType [com.nemea.hydra.model.test.Employee]