Как извлечь значение из "словарной таблицы" в JPA - PullRequest
0 голосов
/ 04 июля 2019

Я хочу отобразить две таблицы (соединение ManyToOne) на один объект в Java.Одна из них - первичная таблица CatalogObject, вторая - просто словарь возможных типов объектов.В Java я хочу просто иметь тип String вместо сопоставления с новым объектом.Когда я хочу найти все объекты в классе (например, «база данных»), я должен сначала найти Id типа «база данных», а затем найти все CatalogObjects с указанным этим Id.Это выглядит немного утомительно.

CatalogObject Table:
    ID, Name, Parent_ID (FK), TYPE_ID (FK)

Type Table: 
    ID, Type.

Я создал отображение с классами CatalogObject и CatalogObjectType, но класс CatalogObjectType сейчас содержит только одну строку.

public class CatalogObject implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "parent_id")
    CatalogObject parent;

    String name;

    @ManyToOne
    @JoinColumn(name = "type_id")
    CatalogObjectType type;
}

public class CatalogObjectType implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;

    String name;
}

Я хочу заменитьCatalogObjectType только со строковым значением связанного типа.Как настроить его для Hibernate / JPA?Можно ли это сделать?

Что я хочу:

public class CatalogObject implements Serializable {
    ...
    String name;

    @SomeAnnotation(name = "type_id")
    String type;
}

1 Ответ

0 голосов
/ 04 июля 2019

Да, вы можете сопоставить сущность с 2 таблицами базы данных в 2 простых шага:

  1. Вам необходимо аннотировать вашу сущность аннотациями JPA @Table и @SecondaryTable и указывать именапервая и вторая таблицы в качестве значения параметров имени.
  2. Вам необходимо аннотировать каждый атрибут, который вы хотите отобразить, во вторичную таблицу с пометкой @Column и установить имя вторичной таблицы в качестве значения.атрибута таблицы.

Аннотация @Table определяет первичную таблицу, в которую атрибуты сущности отображаются по умолчанию.Аннотация @SecondaryTable указывает вторую таблицу базы данных, в которую отображается объект.

Это все, что вам нужно сделать, чтобы сопоставить 2 таблицы базы данных с одним объектом.

Вы можете проверить эта ссылка для подробного объяснения с образцом.

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