Объекты JPA должны быть классами, поэтому попытка отобразить интерфейс не будет работать.Сопоставленные классы не обязательно должны быть конкретными, поэтому абстрактные классы работают с ассоциациями.
Должно работать следующее:
@MappedSuperclass
abstract class Material {}
@MappedSuperclass
abstract class LoanableMaterial extends Material implements Loanable {}
@Entity
class Journal extends Material {}
@Entity
class Book extends LoanableMaterial {}
@Entity
class DigitalMedia extends LoanableMaterial {}
@Entity
class Loan {
@ManyToOne(targetEntity = LoanableMaterial.class)
LoanableMaterial loaned;
}
Ассоциация между Loan
и Loanable
многие-ко-многим.Это связано с тем, что хотя один материал можно одолжить только одному студенту за раз, его можно одолжить нескольким студентам в разное время.Точно так же, хотя один студент может одолжить только один материал за раз, один и тот же студент может одолжить много материалов в разное время.Следовательно, ассоциация от Loan
до User
должна быть также ManyToOne
.