JPA для получения имени-значения из дочерней таблицы без использования модели для дочернего элемента - PullRequest
0 голосов
/ 02 сентября 2010

Это то, что я действительно хотел бы сделать - разрешать имена на основе значений идентификаторов, не выбирая всю дочернюю модель.

Вот пример того, что у меня есть, в таблице сказано «Сотрудник» итаблица Name_Details Сотрудник может выглядеть следующим образом

Create Table Employee {
  emp_idinteger not null generated by default as identity; -- generated pk
  Department varchar(44);
  emp_name_id  Integer;  -- fk to Name_Details table
  ...other details such as hire_date etc..
}

теперь emp_id является внешним ключом таблицы name_details, который может выглядеть следующим образом: -

Create Table Name_Details {
  id Integer;
  Name varchar(32);
  Address Varchar(127);
  Postcode Varchar(10);
  --other details..
}

Мой вопрос заключается в том, что я 'Я хотел бы смоделировать первую таблицу Employee с помощью класса Java, но я не заинтересован в установлении взаимно-однозначного отношения между классом Employee и таблицей Name_Details для извлечения всей этой таблицы Name_details (так как она довольно большая) единственной информацииЯ хочу, чтобы из этого второго класса было просто поле «Имя» (его можно найти, соединив столбец emp_name_id со столбцом Name_Details.id. Поэтому в JPA можно сказать, объявить что-то вроде переходной переменной в моем классе Employee с именем say String employeeName иизвлечено JPA на основе вышеуказанного родства? Это упрощенный экзаменИз того, что у меня есть, есть несколько таблиц с парами «имя-значение», и главная таблица имеет значения.Мне это нужно для чтения, а не для обновления / удаления и т. Д. Я не использую JPA v1.x с EJB3 (и не в спящем режиме) на WPS 6.1

Thx G

1 Ответ

1 голос
/ 02 сентября 2010

Есть несколько вариантов.

Первый - просто создать класс Name, который сопоставляется с Name_Details, но отображает только поля name и id. Затем сотрудник получит OneToOne to Name, и будет прочитано только имя.

Второй вариант - определить Name_Details как @SecondaryTable в Employee и отобразить только имя из него. Спецификация JPA ограничивает объединение вторичной таблицы тем, что оно должно иметь один и тот же идентификатор, но в зависимости от того, какого провайдера JPA вы используете, возможно использование внешнего ключа 1-1 (EclipseLink поддерживает это). Вы также можете определить вид соединения и сопоставить его с видом.

Третье решение - сопоставить все поля Name_Details, но определить их как LAZY. Если ваш провайдер JPA поддерживает основы LAZY (или выборочные группы), они не будут извлечены, если к ним нет доступа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...