У меня есть объект, который соответствует какой-то таблице в БД
@Entity
@Table
public class MyEntity {
@Id
private Long id;
@Column
private String description;
@OneToMany
private List<Foo> foos;
...
//getters setters
...
}
И я хотел бы расширить эту сущность только для чтения и добавить дополнительные объединения в другую таблицу. Мне нужно это объединение только в одном случае для конкретного чтения пользователя:
@Entity
public class ExtendedEntity extends MyEntity {
@ManyToMany(fetch = FetchType.EAGER)
private List<Bar> bars;
}
Простое использование расширений создаст в БД столбец дискриминатора, который мне не нужен, поскольку я использую ExtendedEntity
только для чтения. Я обнаружил, что взломал с помощью @DiscriminatorFormula
, который будет преобразован в то же значение типа Integer, как это:
@DiscriminatorFormula("0")
@DiscriminatorValue("0")
public class MyEntity
@DiscriminatorValue("00")
public class ExtendedEntity extends MyEntity
Но это действительно похоже на взлом. С использованием @MappedSuperclass
я не могу иметь ассоциаций, но это главная причина, по которой мне нужно расширять свою сущность.
Какие еще варианты у меня есть и каковы лучшие практики для этого варианта использования?