У нас есть таблица DB user
, которая развивалась совсем немного, и мы не хотим загружать унаследованных пользователей в приложение. Устаревший пользователь идентифицируется по столбцу user_type
.Есть ли способ унаследовать аннотацию @Where Hibernate?
Если я использую следующее отображение, то все работает, как ожидалось:
@Entity
@Table(name="user")
@Where("user_type = 2") // 1 is legacy
class User {
@Column(name="user_type")
int type;
}
Мне нужно отобразить user
таблицы несколько раз, и я хочу остаться DRY. Так я думал, что я могу извлечь @Where
немного в супер класс и наследовать его, как так:
@Where("type = 2") // 1 is legacy
abstract class BaseUser {
}
@Entity
@Table(name="user")
class User extends BaseUser {
}
У меня есть следующий тест (я надеюсь, что это само за себя достаточно), что не может, хотя:
@Test
@DbUnitData("legacy_user.xml") // populates DB with 1 user (id=1) with type=1
public void shouldNotGetLegacyUser() {
assertThat(em.find(User.class, 1L)).isNull();
}
Есть ли способ наследования класса с аннотацией @Where
Hibernate?
Это не работает для меня. Сначала он жаловался на отсутствующий идентификатор в «BaseUser», поэтому я добавил его. Теперь он жалуется на это: 'org.hibernate.mapping.SingleTableSubclass не может быть передан в org.hibernate.mapping.RootClass' – Xorty
вправо, поэтому я нашел проблему - кажется, что I * не может * сопоставить собственно столбец дискриминатора в классе детей ... – Xorty