Запрос гибернации по свойству суперкласса - PullRequest
4 голосов
/ 23 августа 2011

Прежде всего, пожалуйста, прости мое невежество как в 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 Ответ

1 голос
/ 01 сентября 2011

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) Нет. Не без изменения имен атрибутов одного из сотрудников или сотрудников. Однако вы можете запросить все объекты-люди с таким именем и привести результаты к Сотрудникам. Другой вариант - использовать собственный SQL для запроса нужного столбца, опять же, вероятно, не идеально.

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