我正在使用CrudRepository。
在两种情况下我需要方法findById:
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);
}
我无法使用电子邮件对象,因为它包含具有地址等数据的用户(不需要)。
任何想法如何解决这个问题?可能,我应该更改实体定义吗?
答案 0 :(得分:0)
您只需要使用其他名称即可。这与Spring Data完全无关。
Java根据方法的签名(名称和参数,不包括返回类型)决定方法的唯一性。
阅读covariance
和contravariance
以便更好地理解,此外:https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.2
答案 1 :(得分:0)