Возвращает два разных типа данных для одного метода CrudRepository (findById) - PullRequest
0 голосов
/ 13 января 2019

Я использую CrudRepository.

Мне нужен метод findById в двух сценариях:

  1. EmailShort findById (длинный идентификатор);
  2. EmailFull findById (Long id);

EmailShort и EmailFull являются интерфейсами.

public interface EmailFull extends EmailCustom {
    Long getId();

    UserShort getSender();
    String getContent();
    String getTopic();
    String getShortContent();

    @JsonFormat
            (shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy HH:mm:ss")
    Date getCreationTime();
}

public interface EmailShort extends EmailCustom {
    Long getId();

    UserShort getSender();
    String getTopic();
    String getShortContent();
    boolean getIsRead();
    void setRead(boolean read);

    @JsonFormat
            (shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy HH:mm:ss")
    Date getCreationTime();
}

Мой репозиторий:

@Repository
public interface EmailDao extends CrudRepository<Email, Long> {

    EmailShort findById(Long id);

    @Query("select e from email e where e.id=?1")
    EmailFull findFullById(@Param("id") Long id);

    @Query(value = "select * " +
            "from email " +
            "where email.id = :emailId", nativeQuery = true)
    EmailShort findByIdWithShortSenderInfo(@Param("emailId") long emailId);
}

Я не могу использовать объект электронной почты, поскольку он содержит пользователя с такими данными, как адрес и т. Д. (Не нужен).

Есть идеи, как решить эту проблему? Может, мне стоит изменить определения сущностей?

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Я бы использовал прогнозы в этом случае: https://docs.spring.io/spring-data/jpa/docs/2.1.4.RELEASE/reference/html/#projections

0 голосов
/ 13 января 2019

Вы просто должны использовать другое имя. Это вообще не относится к Spring Data.

Java определяет уникальность метода на основе сигнатуры метода - имени и параметров, не включая возвращаемые типы.

Для лучшего понимания прочитайте covariance и contravariance, а также: https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...