Springクラウドを使用して、ファイルストアに接続してデータを読み取ります(ネイティブモードでCloud Firestoreを使用)。
Pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-data-datastore</artifactId>
</dependency>
Spring GCP バージョン - <gcp.version>1.2.8.RELEASE</gcp.version>
実在物
import org.springframework.cloud.gcp.data.datastore.core.mapping.Entity;
import org.springframework.data.annotation.Id;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Entity(name = "user_profile")
public class UserProfile {
@Id
private Long id;
private String applicationId;
private String firstName;
}
リポジトリ
import org.springframework.cloud.gcp.data.datastore.repository.DatastoreRepository;
public interface UserProfileRepository extends DatastoreRepository<UserProfile, Long> {
List<UserProfile> findByApplicationId(String applicationId);
}
サービス
// Save
public void register(UserRegistrationRequest dto) {
UserProfile userProfile = new UserProfile();
userProfile.setFirstName(dto.getFirstName());
userProfile.setApplicationId(tkmIdGenerator.generate(UserType.Candidate));
userProfileRepository.save(userProfile);
}
// Get
public void getUserDetails(String applicationId) {
java.util.List<UserProfile> userProfiles = userProfileRepository.findByApplicationId(applicationId, Sort.by(Order.asc("applicationId")));
System.out.println(userProfiles);
}
保存は完全に正常に機能しますが、それを読み取ろうとすると、インデックスが一致しないというエラーが発生します。データを読み取るために単一の属性を使用しています。この場合、firestore は自動的にインデックスを作成します。なぜこのエラーが発生するのか少し混乱しています。
エラー
com.google.datastore.v1.client.DatastoreException: no matching index found.
at com.google.datastore.v1.client.RemoteRpc.makeException(RemoteRpc.java:136) ~[datastore-v1-proto-client-1.6.3.jar:na]
at com.google.datastore.v1.client.RemoteRpc.makeException(RemoteRpc.java:185) ~[datastore-v1-proto-client-1.6.3.jar:na]
at com.google.datastore.v1.client.RemoteRpc.call(RemoteRpc.java:96) ~[datastore-v1-proto-client-1.6.3.jar:na]
at com.google.datastore.v1.client.Datastore.runQuery(Datastore.java:119) ~[datastore-v1-proto-client-1.6.3.jar:na]
at com.google.cloud.datastore.spi.v1.HttpDatastoreRpc.runQuery(HttpDatastoreRpc.java:198) ~[google-cloud-datastore-1.105.3.jar:1.105.3]
at com.google.cloud.datastore.DatastoreImpl$1.call(DatastoreImpl.java:194) ~[google-cloud-datastore-1.105.3.jar:1.105.3]
at com.google.cloud.datastore.DatastoreImpl$1.call(DatastoreImpl.java:191) ~[google-cloud-datastore-1.105.3.jar:1.105.3]
at com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:105) ~[gax-1.60.1.jar:1.60.1]