• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

182
Views
¿Dónde se construye `_class` en Spring Data Couchbase cuando se usan los métodos 'findBy'?

¿Qué clases en Spring Data puedo extender/anular para que la cláusula where incluya las clases que heredan la entidad/modelo base?

Elaborar....

Aquí hay algunos modelos que se extienden desde una clase de actividad "base":

 @Document public abstract class Activity { } @Document public class CommentActivity extends Activity { } @Document public class ShareActivity extends Activity { }

Al guardar estos modelos, estoy usando una sola clase de repositorio como se define a continuación con un método "findBy":

 @Repository("activityRepository") public interface Activity extends CouchbaseRepository<Activity, String>, CouchbaseRepositoryCustom<Activity, String> { Page<Activity> findByPersonId(String personId, Pageable pageable); } // saving a model in my application would be like so activityRepository.save(new CommentActivity());

Al recuperar esto de Couchbase, la estructura se devuelve así:

 { "_CAS": 123234342354345, "_ID": "0001", "_class": "com.myproject.models.CommentActivity", "comment": "yo", "dateCreated": 1400000000000, "dateUpdated": 1400000000000, "personId": "0001" }

El proyecto utiliza Spring Data Couchbase 2.2.0.RELEASE. Según la interfaz de repositorio anterior, llamar al método findByPersonId generaría automáticamente una consulta que solo contiene la clase base en la cláusula where.

 WHERE (`personId` = "0001") AND `_class` = "com.myproject.models.Activity"

En mi caso, me gustaría incluir todos los tipos que se extienden desde Actividad de esta manera:

 WHERE (`_class` = "com.myproject.models.Activity" OR `_class` = "com.myproject.models.UpdatedActivity" OR `_class` = "com.myproject.models.StatusChangedActivity") AND personId = "0001"
about 3 years ago · Santiago Trujillo
1 answers
Answer question

0

Puede definir su propia cadena de consulta, como

 @Query("#{#n1ql.selectEntity} WHERE personId = ${'$'}personId AND (_class='com.myproject.models.UpdatedActivity' OR _class='com.myproject.models.StatusChangedActivity'") fun findByPersonId(@Param("personId") personId: String): List<Activity>

El código anterior está en Kotlin, pero supongo que se adapta fácilmente a Java.

Tenga en cuenta que tuve que agregar @N1qlPrimaryIndexed a la clase de repositorio.

about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error