Репозитории данных Micronaut имеют удобную функцию, с помощью которой вы можете получить подмножество своих свойств, возвращая объект DTO.
Итак, если у меня есть класс Widget с 50 свойствами, я могу создать MicroWidgetDTO только с 4, отметьте его @Introspected, а затем используйте
List<MicroWidgetDTO> findByPartNumber(String partNumber)
, и база данных будет запрашивать только 4 свойства, определенные в MicroWidgetDTO.
Если бы у меня было несколько DTO.
MiniWidgetDTO
MicroWidgetDTO
MegaWidgetDTO
Каков правильный способ определения методов в репозитории?
Пример кода:
@MappedEntity
class Widget {
String name
String partNumber
Date manufactureDate
... 50 more properties
}
@Introspected
class MicroWidgetDTO {
String name
}
@Introspected
class MiniWidgetDTO {
String name
Date manufactureDate
}
@Introspected
class MegaWigetDTO {
String name
String manufactureDate
String partNumber
}
Теперь, как написать репозиторий, допускающий разную степень детализации ответов?
@JdbcRepository(dialect = Dialect.MYSQL)
interface WidgetRepository extends CrudRepository<Widget,Long> {
List<MicroWidgetDTO> findByPartNumber(String partNumber)
List<MiniWidgetDTO> findByPartNumber(String partNumber) // fails. method signature identacal.
List<MegaWidgetByPartNumber>
findMegaWidgetByPartNumber(String partNumber) // fails. can't find property MegaWidget
}
Я знаю, что могу создать другой репозиторий, который возвращает разные типы, и просто использовать findByPartNumber в каждом репозитории (MegaWidgetRepo, MiniWidgetRepo), но мне было любопытно, есть ли схема именования, которая дает вам все the magi c без необходимости создавать новые репозитории.