Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 超类属性的Hibernate查询_Java_Hibernate_Oop_Orm_Hibernate Mapping - Fatal编程技术网

Java 超类属性的Hibernate查询

Java 超类属性的Hibernate查询,java,hibernate,oop,orm,hibernate-mapping,Java,Hibernate,Oop,Orm,Hibernate Mapping,首先,请原谅我对Java和Hibernate的无知,我正在研究不同的ORM解决方案,不是Java程序员 1) 是否可以将以下类层次结构映射到一个数据库表,Person.name和Employee.name指向不同的列 abstract public class Person { private String name; } public class Employee extends Person { private String name; } 2) 假设1)

首先,请原谅我对Java和Hibernate的无知,我正在研究不同的ORM解决方案,不是Java程序员

1) 是否可以将以下类层次结构映射到一个数据库表,
Person.name
Employee.name
指向不同的列

abstract public class Person {
        private String name;
}

public class Employee extends Person {
        private String name;
}
2) 假设1)的答案是肯定的,有没有办法创建一个HQL或Criteria查询,要求Hibernate返回
Employee
对象,条件是
Person.name

诸如此类:

SELECT e FROM Employee e WHERE e.super.name = "test";
1) 对。这可以通过
MappedSuperclass
和注释列来实现

@MappedSuperclass
abstract public class Person { 
  @Column(name="PERSON_NAME")
  private String name; 
}
@Entity
public class Employee extends Person {
        @Column(name="EMPLOYEE_NAME")
        private String name;
}
2) 不可以。如果不更改个人或员工的属性名称,则不可以。但是,您可以查询具有该名称的所有person对象,并将结果强制转换为Employees。另一种选择是使用本机SQL查询所需的列,这可能也不理想

SELECT p FROM Person p WHERE p.name = "test";

非常感谢。这意味着p.name映射到DQL查询中的两个不同列,具体取决于“FROM”类?是的,p.name将其限定为“Person”,因此JPA知道将其映射到Person\u name。