Использование проекции без аннотации @Projection
Ситуация
Я унаследовал некоторый код от разработчика, который, похоже, использовал недокументированные функции spring.
В частности, это связано с использованием функциональности @projection
без фактического аннотирования interface
как такового.
Конкретный пример таков:
public interface DirType extends KeyValInterface {
@Value("#{target.id}") String getId();
@Value("#{target.code}") String getText();
}
Это не должно работать согласно официальной документации, но это так.
public interface DirTypeRepository extends JpaRepository<ABDirType, Long> {
List<DirType> findAllSummarizedBy();
}
Таким образом, метод findAllSummarizedBy()
respository фактически посылает список DirType
.
И он использует аннотации @Value
для отображения, но без аннотации @Projection
.
Класс Entity
следующий:
@Data @Entity @Table(name="dir_type") @AllArgsConstructor @NoArgsConstructor
public static class ABDirType {
private @Id @GeneratedValue Long id;
private String code;
}
Вопрос
Есть ли у кого-нибудь еще информация об этой недокументированной функции, связанной сProjections
и не аннотирующей интерфейс как @Projection
?
Возможно ли это во всех версиях или это скрытый хак, который рискованно использовать?
1 ответ:
В Spring Data JPA (который вы, кажется, используете здесь), вы можете просто использовать интерфейс с соответствующими геттерами в качестве целей проекции.
Смотрите документацию об этом (esp. - Пример 62. Простая Проекция").
Похоже, что нигде в документации нет аннотации
@Projection
.