Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

218
Visualizações
¿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 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

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 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda