Мое приложение должно поддерживать использование зарегистрированных пользователей из другой системы.Это отображение в порядке, я могу загрузить и запросить из обеих таблиц:
@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?Есть ли другой способ сделать это?