如何将 Spring 数据投影与瞬态 属性 一起使用?
How can I use Spring Data Projection with a Transient property?
我正在使用 Spring 数据和 MongoDB 以及其中一个存储库的投影接口。
问题是我的实体上的瞬态字段在模型上未被识别为有效 属性,因为它不是查询结果的一部分。 [假设]
有解决办法吗?
例子-
// Entity class fields
@JsonProperty(access=Access.WRITE_ONLY)
private String password;
@Id
private String username;
private String displayName;
@DBRef
private Set<EmailAddress> emailAddresses = new HashSet<>();
@DBRef
@NotEmpty
private EmailAddress primaryEmailAddress;
private boolean hidePrimaryEmailAddress;
private String firstName;
private String lastName;
@JsonTypeInfo(use = com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NONE)
private Set<Role> authorities;
private boolean accountNonExpired;
private boolean accountNonLocked;
private boolean credentialsNonExpired;
private boolean enabled;
@Transient
private String gravatarUrl;
.....
// Spring Data Projection
public interface ProfileProjection {
@Value("#{target.primaryEmailAddress.emailAddress}")
String getEmailAddress();
String getUsername();
String getDisplayName();
String getGravatarUrl();
}
// Repository
public interface UserRepository extends ExtendedMongoRepository<SproutUser, String> {
ProfileProjection findFirstByUsername(String username);
}
异常-
No property gravatarUrl found on savantly.sprout.domain.SproutUser!
我使用 SPEL 调用 getter 而不是直接依赖字段。
public interface ProfileProjection {
@Value("#{target.primaryEmailAddress.emailAddress}")
String getEmailAddress();
String getPrimaryEmailAddress();
String getUsername();
String getDisplayName();
@Value("#{target.getGravatarUrl()}")
String getGravatarUrl();
}
我正在使用 Spring 数据和 MongoDB 以及其中一个存储库的投影接口。
问题是我的实体上的瞬态字段在模型上未被识别为有效 属性,因为它不是查询结果的一部分。 [假设]
有解决办法吗?
例子-
// Entity class fields
@JsonProperty(access=Access.WRITE_ONLY)
private String password;
@Id
private String username;
private String displayName;
@DBRef
private Set<EmailAddress> emailAddresses = new HashSet<>();
@DBRef
@NotEmpty
private EmailAddress primaryEmailAddress;
private boolean hidePrimaryEmailAddress;
private String firstName;
private String lastName;
@JsonTypeInfo(use = com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NONE)
private Set<Role> authorities;
private boolean accountNonExpired;
private boolean accountNonLocked;
private boolean credentialsNonExpired;
private boolean enabled;
@Transient
private String gravatarUrl;
.....
// Spring Data Projection
public interface ProfileProjection {
@Value("#{target.primaryEmailAddress.emailAddress}")
String getEmailAddress();
String getUsername();
String getDisplayName();
String getGravatarUrl();
}
// Repository
public interface UserRepository extends ExtendedMongoRepository<SproutUser, String> {
ProfileProjection findFirstByUsername(String username);
}
异常-
No property gravatarUrl found on savantly.sprout.domain.SproutUser!
我使用 SPEL 调用 getter 而不是直接依赖字段。
public interface ProfileProjection {
@Value("#{target.primaryEmailAddress.emailAddress}")
String getEmailAddress();
String getPrimaryEmailAddress();
String getUsername();
String getDisplayName();
@Value("#{target.getGravatarUrl()}")
String getGravatarUrl();
}