Как вы называете методы в репозитории микронавтов, если у вас несколько DTO? - PullRequest
0 голосов
/ 16 июня 2020

Репозитории данных 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 без необходимости создавать новые репозитории.

...