java – JPA 2.1 Hibernate中的NamedSubgraph忽略了子类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – JPA 2.1 Hibernate中的NamedSubgraph忽略了子类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2717字,纯文字阅读大概需要4分钟。
内容图文
![java – JPA 2.1 Hibernate中的NamedSubgraph忽略了子类](/upload/InfoBanner/zyjiaocheng/809/0c52716e2a894987b23b62e53e34d497.jpg)
我正在使用Hibernate 4.3.8.FINAL并且具有以下模型,其中Department有许多Employees,Employee可以是Manager.
员工实体:
@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,并且还要获取Manager.carAllowance.但是我收到以下错误:
Unable to locate Attribute with the the given name [carAllowance] on this ManagedType [com.nemea.hydra.model.test.Employee]
根据我的理解,@ NamedSubgraph.type应该用于指定要获取的实体子类属性.是否有可能Hibernate忽略了@NamedSubgraph注释的type = Manager.class属性,或者我错过了什么?
解决方法:
这可能是Hibernate 4.3.8.FINAL的缺陷,例如,当使用subgraphs属性时,EclipseLink 2.5.1不会抛出异常.
无论如何,当你在Manager类型的情况下指定subclassSubgraphs而不是子类时它应该工作,即:
@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")
}
)
},
subclassSubgraphs = {
@NamedSubgraph(
name = "FetchManagers.Subgraph.Managers",
type = Manager.class,
attributeNodes = {
@NamedAttributeNode(value = "carAllowance"),
}
)
}
)
内容总结
以上是互联网集市为您收集整理的java – JPA 2.1 Hibernate中的NamedSubgraph忽略了子类全部内容,希望文章能够帮你解决java – JPA 2.1 Hibernate中的NamedSubgraph忽略了子类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。