Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用具有瞬态特性的Spring数据投影?_Java_Mongodb_Spring Data_Projection - Fatal编程技术网

Java 如何使用具有瞬态特性的Spring数据投影?

Java 如何使用具有瞬态特性的Spring数据投影?,java,mongodb,spring-data,projection,Java,Mongodb,Spring Data,Projection,我将Spring数据与MongoDB一起使用,并为其中一个存储库使用投影接口。 问题是,实体上的临时字段未被识别为模型上的有效属性,因为它不是查询结果的一部分。[假设] 有解决办法吗 范例- // Entity class fields @JsonProperty(access=Access.WRITE_ONLY) private String password; @Id private String username; private String displayName; @DBRef p

我将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);
}  

我使用SPEL调用getter,而不是直接依赖于字段

public interface ProfileProjection {
    @Value("#{target.primaryEmailAddress.emailAddress}")
    String getEmailAddress();
    String getPrimaryEmailAddress();
    String getUsername();
    String getDisplayName();
    @Value("#{target.getGravatarUrl()}")
    String getGravatarUrl();
}
public interface ProfileProjection {
    @Value("#{target.primaryEmailAddress.emailAddress}")
    String getEmailAddress();
    String getPrimaryEmailAddress();
    String getUsername();
    String getDisplayName();
    @Value("#{target.getGravatarUrl()}")
    String getGravatarUrl();
}