Hibernate @SecondaryTable - Указание внешнего ключа первичной таблицы - PullRequest
0 голосов
/ 03 января 2019

У меня есть две таблицы:

  1. язык

    CREATE TABLE language (
      id   BIGSERIAL,
      name TEXT NOT NULL UNIQUE,
      PRIMARY KEY (id)
    );
    
  2. перевод

    CREATE TABLE translation (
      id                BIGSERIAL,
      language_id       BIGINT REFERENCES language (id),
      translation_key   TEXT NOT NULL,
      translation_value TEXT NOT NULL,
      PRIMARY KEY (id)
    );
    

    И я бы хотелполучить такую ​​сущность, где таблица перевода (первичная таблица) соединяется с языковой таблицей по language_id из первичной таблицы. Проблема: в данный момент он включается переводом PK (id).

    @Entity
    @Table(name = "translation")
    @SecondaryTable(name = "language", pkJoinColumns = @PrimaryKeyJoinColumn(name = "id"))
    public class Translation {
    
        @Id
        @Column(name = "id")
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private long id;
    
        @Column(table = "language", name = "name")
        // ON translation.language_id = language.id
        private String language;
    
        @Column(name = "translation_key")
        private String translationKey;
    
        @Column(name = "translation_value")
        private String translationValue;
    
        // getters and setters
    }
    

    Где я должен указать это в своем коде, чтобы сделать это правильно? Пример SQL: SELECT t.id, l.name, translation_key, translation_value FROM translation t INNER JOIN language l on t.language_id = l.id;

1 Ответ

0 голосов
/ 04 января 2019

Вы не можете использовать @SecondaryTable для целей, которые вы описываете.

@SecondaryTable используется, когда один объект распределен по нескольким таблицам.Каждый из этих «кусочков» сущности должен находиться в частной собственности субъекта и находиться в непосредственном отношении с каждым другим «кусочком».

Если вы хотите, чтобы между переводами и языками было многозначное отношение, вам нужно вместо этого использовать @ManyToOne (и создать отдельную Language сущность).

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