Таблица наследования таблиц для каждого конкретного класса и OneToMany - PullRequest
0 голосов
/ 22 марта 2019

Мое приложение должно поддерживать использование зарегистрированных пользователей из другой системы.Это отображение в порядке, я могу загрузить и запросить из обеих таблиц:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
abstract class User {
    private String id; // "username"
}

@Entity
@Table("MY_APP_USER")
abstract class MyAppUser extends User {
    // other properties
}

@Entity
@Table("OTHER_APP_USER")
abstract class OtherAppUser extends User {
    // other properties
}

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

@Entity
@Table("ERROR")
class Error {
    // other properties
    @JoinColumn(name = "my_app_user")
    @OneToOne(fetch = FetchType.EAGER)
    private MyAppUser myAppUser;
    @JoinColumn(name = "other_app_user")
    @OneToOne(fetch = FetchType.EAGER)
    private OtherAppUser otherAppUser;

    public User getUser() {
        return myAppUser != null ? myAppUser : otherAppUser;
    }

    public void setUser(User user) {
        if (user instanceof MyAppUser)
            this.myAppUser = (MyAppUser) user;
        else if (user instanceof OtherAppUser)
            this.otherAppUser = (OtherAppUser) user;
    }
}

Этокажется, работает, но это правильный способ сделать это?

Второй случай, мне кажется, что это сложно, даже после прочтения документов несколько раз:

@Entity
@Table("REPORT")
class Report {
    // other properties
    @OneToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "REPORT_USER",
                joinColumns = @JoinColumn(name = "report_id"),
                inverseJoinColumns = @JoinColumn(name = "????????"))
    private Set<User> setUsers;
}

Я могу 'Я не использую триггеры для обеспечения целостности данных, поэтому я добавляю два столбца каждый раз, когда мне нужен пользователь: my_app_user и other_app_userИтак, мне нужно указать два столбца в "inverseJoinColumns", как мне это сделать?Я отображаю это дважды, как я делал в классе Erro, и делаю обходной путь в gette / setter?Есть ли другой способ сделать это?

1 Ответ

0 голосов
/ 09 апреля 2019

У меня также была проблема ManyToMany, я оставил код из исходного поста и вместо использования @JoinTable я создал сущность для @JoinTable и использовал эту сущность в отображениях.

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