When i try to select some part of couchbase document using a dto class,getting this error.
I tried several possible solutions like changing return type of query method Optional<ResponseDto>
and getting from Optional
class but did not fixed.I dont understand why it look for 'docTypeVersion'
in Optional
class.I did not try to get docTypeVersion
from Optional
class.
org.springframework.dao.InvalidDataAccessApiUsageException: Required property docTypeVersion not found for class java.util.Optional; nested exception is java.lang.IllegalStateException: Required property docTypeVersion not found for class java.util.Optional
Repository class:
@Repository
@Scope("efatura_islem")
@Collection("gib_thread_process_non_verified")
public interface ThreadProcessCouchbaseRepository extends CouchbaseRepository<ThreadProcessCouchbaseEntity, String> {
@Query("SELECT meta(gtp).id AS __id , gtp.doc_type_version FROM gib_thread_process_non_verified AS gtp WHERE gtp.zip_path=$documentInstanceIdentifier")
ResponseDto selectApplicationResponseInfo(String documentInstanceIdentifier);
}
DTO class:
@Data
@Document
public class ResponseDto implements Serializable {
@Field("doc_type_version")
private String docTypeVersion;
}
Document is below that:
{
"_class": "tr.gov.gib.efatura.core.entity.couchbase.ThreadProcessCouchbaseEntity",
"calc_hash": "6DB58D42B042F975A7E68464C8E18FE5",
"client": "10.233.92.0",
"doc_date_time": "2023-08-09T19:24:53",
"doc_type": "SYSTEMENVELOPE",
"doc_type_version": "1.2",
"error": "ZARF_BASARIYLA_ISLENDI",
"issue_date": "2023-08-09",
"gib_elements": [
{
"element_type": "APPLICATIONRESPONSE",
"fKey": "20548227-BDB9-4A7E-B873-FB7B8E3E2BCB",
"item_count": 1,
"oid": "31ll52grm01001"
}
],
"header_version": "1.0",
"state_code": "1200",
"zip_path": "20548227-BDB9-4A7E-B873-FB7B8E3E2BCB.zip"
}
And metadata is below that:
{
"meta": {
"id": "20548227-BDB9-4A7E-B873-FB7B8E3E2BCB",
"rev": "1178-177a01ea20e300000000000002000000",
"expiration": 0,
"flags": 33554432,
"type": "json"
},
"xattrs": {}
}
I had the same problem as you and making the return type optional did not work for me. Making it List works, however when you know that you are selecting a unique document, you dont want to retrieve in a list. You are using the entity class in your repo and trying to retrieve it as a dto. One solution is, make repo use your dto class. Modify it like this:
@Repository
@Scope("efatura_islem")
@Collection("gib_thread_process_non_verified")
public interface ThreadProcessCouchbaseRepository extends CouchbaseRepository< ResponseDto, String> {
@Query("SELECT meta(gtp).id AS __id , gtp.doc_type_version FROM gib_thread_process_non_verified AS gtp WHERE gtp.zip_path=$documentInstanceIdentifier")
ResponseDto selectApplicationResponseInfo(String documentInstanceIdentifier);
}
If you dont want to modify your repo, or write a seperate one for the dto, you should make your dto extend the entity class like this:
@Data
@Document
public class ResponseDto extends ThreadProcessCouchbaseEntity {...}
Then you will not need to use Optional or List. It worked for me, i hope this works for you too.