В проекте у меня есть 2 контроллера REST, один из которых предназначен для использования третьими лицами, а другой - внутренним персоналом. Оба контроллера возвращают одни и те же объекты, но третьи стороны получают отфильтрованное подмножество того, что видит внутренний персонал. Фильтрация выполняется на основе поля типа объекта.
Моя текущая реализация выглядит следующим образом
@Entity
@Table("TABLENAME")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorFormula("0")
@DiscriminatorValue("0")
public class Entity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "EntitySeq")
@SequenceGenerator(name = "EntitySeq", sequenceName = "ENTITY_SEQ", allocationSize = 20)
private Long id;
//@Column("ENTITY_TYPE")
//private EntityType entityType; //EntityType is an enumerator
}
@Entity
@Table("TABLENAME")
@Where("ENTITY_TYPE in ('A', 'B', 'C')
@DiscriminatorValue("00") //Found at /7229174/nasledovanie-v-odnoi-tablitse-bez-diskriminatora
public class LimitedEntity extends Entity {}
Репозиторий записывается следующим образом:
public interface EntityRepository<T extends Entity> extends PagingAndSortingRepository<T, long> {
List<T> findAll();
List<T> findAll(Date from, Date to, Pageable pageable);
}
Чтобы проверить все это, я написал следующий тест:
@RunWith(SpringRunner.class)
@DataJpaTest
@ActiveProfiles({"local", "h2db"})
public class EntityRepositoryTest {
@Autowired
private TestEntityManager entityManager;
@Autowired
private EntityRepository<Entity> entityEntityRepository;
@Autowired
private EntityRepository<LimitedEntity> limitedEntityEntityRepository;
@Before
public void setup() {
//Insert a record in the database for each possible value of entityType
}
@Test
public void vacatureTypeFilterTest() {
Date from = new GregorianCalendar(2018, 11, 5).getTime();
Date to = new GregorianCalendar(2018, 11, 6).getTime();
Assertions.assertThat(entityEntityRepository.countAllVacatures(from , to)).isEqualTo(EntityType.values().length);
Assertions.assertThat(limitedEntityEntityRepository.countAllVacatures(from , to)).isEqualTo(3);
}
}
Как написано в тесте, я ожидал, что результаты будут 9 и 3 соответственно, но оказывается, что они оба 9.
Почему это не работает, как ожидалось? Каков / правильный способ глобальной фильтрации?