Spring Data JPA Flashcards

1
Q

Para que nos sirve spring data JPA

A

Nos sirve para crear queries por medio del dominio con DSL, nos ayuda a escribir menos codigo repetitivo como las operaciones CRUD ya que nos ahorramos la implementacion de los repositorios y programamos por medio de Interfaces, nos permite hacer auditorias, reutilizar NamedQueries y ponerlos en nuestro repositorio y tambien podemos extenderlo

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Cuales son los tipos de access layers que podemos encontrar y que proyecto se acomoda mejor a cada uno de ellos

A
  1. Jdbc y spring jdbc: bases de datos simples, sql nativo y para reportes
  2. Spring batch o hadoop: para alto numero de inserts
  3. ORM como hibernate, Spring Data JPA: cuando tenemos data graphs sin relaciones exesivas
  4. NoSql como Spring data mongo: cuando no tenemos bases de datos relacionales
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Que es un repositorioJPA

A

Representa a una entidad, es decir que es una relacion uno a uno y este nos da toda la funcionalidad CRUD, queries DSL, Paging, Sorting, por entidad, al igual que la posibilidad de si ya tenemos una data layer y estamos migrando a spring data de reutilizar por medio de queries y named queries, tambien soporta named parameter e index based

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Para que sirve flush

A

Para realizar commit antes de que se termine la transaccion, es la manera de que podemos vaciar nuestros cambios antes de que termine el flujo normal

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Como se especifica que estamos utilizando spring data

A

Por medio de jpa:repositories a a esto le pasamos el paquete base en donde debe de buscar nuestros repositorios, debido a esto es bueno que todos los repositorios esten en un mismo paquete ya que de esta manera solo especificamos el paquete base, contrario a lo que pasaria si pusieramos el codigo en paquetes por funcionalidad en los que cada paquete contendria sus propios dto, entities, repositories

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Que significa y para que sirve DSL

A

Es el acronimo para Domain Specific Language y es una forma en la cual podemos realizar queries por medio de una notacion orientada al dominio, algunos ejemplos de lo que se puede hacer son los siguientes

  1. find
  2. findBy
  3. queryBy
  4. query
  5. count
  6. countBy
  7. get
  8. getBy
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Que tipos de retorno se pueden tener en un DSL

A

Estan definidos por la entidad que se esta haciendo el query, pero se pueden regresar

  1. Listas
  2. Objetos
  3. Primitivos
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Para que sirve And o Or

A

Es lo mismo que en slq y AND es para que las dos cosas sean true, y OR cualquiera de las dos partes pueden ser true, un ejemplo seria

  1. findByNameAndAge(String name, int age)
  2. findByNameOrAge(String name, int age)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Para que sirve Equal, Is y Not

A

Is y Equals es lo mismo,tambien si no se especifica ningun modificador por default es Equal y nos generaran el mismo query y Not es para la negacion algunos ejemplos

  1. findByName(“Jesus”) —> default Equal ya que no se especifica nada
  2. findByNameEqual(“Jesus”); —> todo lo que es igual a jesus
  3. findByNameIs(“Jesus”); —>todo lo que es igual a jesus
  4. findByNameNot(“Jesus”) —>todo lo que NO es igual a jesus
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Para que sirve Like y Not like

A

Nos sirven para comparar un texto parcial y en ambos casos el cliente es el responsable de ponerle los comodines(%) a como sea el caso, algunos ejemplos

  1. findByNameLike(“%sus”)…todo lo que termine con sus
  2. findByNameLike(“sus%”)…todo lo que empiece con sus
  3. findByNameLike(“%sus%”)…todo lo que contenga sus

Lo mismo pero con NotLike

  1. findByNameNotLike(“%sus”)…todo lo que NO termine con sus
  2. findByNameNotLike(“sus%”)…todo lo que NO empiece con sus
  3. findByNameNotLike(“%sus%”)…todo lo que NO contenga sus
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Para que sirve startingWith, endingWith y containing

A

Es lo mismo que like, solo que aqui el query ya nos proporciona el comodin % , por lo cual el cliente ya no tiene que ponerlo, la relacion Like con estas funciones es la siguiente

  1. findByNameLike(“Je%”) = findByNameStartingWith(“Je”)
  2. findByNameLike(“%sus”) = findByNameEndingWith(“sus”)
  3. findByNameLike(“%esu%”) = findByNameContaining(“esu”)

Aplica lo mismo para NotLike

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Para que sirve LessThan y GreaterThan

A

Para comparar valores numericos como por ejemplo rango de edades

  1. findByAgeGreaterThanAndAgeLessThan(1,18); Buscara edades entre 1 y 18 años
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Para que sirve Before, After y Between

A

Similar a greaterThan y LessThan pero para fechas, un problema con esto es que los indices minimo y maximo no son inclusivos, por lo cual se tiene que ajustar un dia menos a la fecha de inicio y fin para lograr algo como menor igual o mayor igual su uso es el siguiente

  1. findByStartedDateAfterAndStartedDateBefore(fecha uno, fecha dos)
  2. findByStartedDateBetween(3 enero, 5 enero)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Para que sirve True y False

A

Para validar contra valores boleanos por ejemplo un estatus

  1. findByEstatusTrue
  2. findByEstatusFalse
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Para que sirve Null y NotNull

A

Sirve para que hagamos la comparacion similar a true o false pero con null y not null ejemplo

  1. findByNameNull
  2. findByNameNotNull
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Para que sirve In y NotIn

A

Para validar que los elementos que le pasamos esten contenido en una coleccion, su uso es el siguiente

  1. findStateIn(coleccion)
  2. findStateNotIn(coleccion)
17
Q

Para que sirve IgnoreCase

A

Para ser case insensitive, se puede combinar con los otros operadores por ejemplo

  1. findByNameLikeIgnoreCase(“JE”);
18
Q

Para que sirve OrderBy

A

Sirve para ordenar dependiendo una columna, debe ser lo ultimo en nuestro query DSL su uso es el siguiente:

  1. findByNameOrderByAge(“Jesus”);
  2. findByNameLikeIgnoreCaseOrderByAge(“Jesus”)
19
Q

Para que sirve First, Top y Distinct

A

First nos regresa el primer resultado dado una condicion, Top le podemos indicar el numero que queremos, es similar a head de linux, distinct va a ser un set de nuestro resultado en una base de datos relacionales, algunos ejemplos de uso son:

  1. findFirstByStateLike(“%E”)
  2. findTop5ByStateLike(“%E”)
  3. findDistinctByCountryLike(“United%”)
20
Q

Para que sirve la anotacion @Query

A

Representa un query en el jpa repository, acepta parametros nombrados o index based su uso es el siguiente

  1. @Query(select m from Model m where m.name=:name) public void queryBlah(@Param(“name”) String nombre)

Si es named tenemos que especificar el parametro con @Param y este nombre que le pasemos entre comillas debe ser el mismo que espera el query, si es index bases debemos poner los parametros en el orden que los necesita, los parametros deben de matchear con el tipo que se definio en la entidad

21
Q

Por que usar @Query y no DSL

A

Debido a que la notacion DSL si tenemos muchas condiciones se puede volver muy grande el nombre, tambien si ya existia una data layer y queremos pasarla a spring data, podriamos reutilizarla por medio de @Query, tambien nos da control sobre el metodo fetch

22
Q

Cuales son algunas de las opciones que podemos usar en @Query

A
  1. Dentro de @Query podemos usar % en un comando Like, dejando asi al cliente un uso transparente
  2. Podemos especificarle que es query nativo por medio de nativeQuery=true, esto tratara de mapear el resultado de nuestro query a nuestros objetos, esto es bueno si queremos optimizar algun query y no cambiaremos de base de datos pero tambien es malo por que nos casamos con una implementacion especifica
  3. @Modifying sirve para poder actualizar por medio de @Query
23
Q

Los @NamedQueries en que momento son validados

A

En tiempo de inicializacion, si no se tiene una propiedad o esta formado no arrancara el proyecto y nos marcara el error y no lo hara en tiempo de ejecucion

24
Q

De que otra manera se puede hacer native queries

A

Por medio de @NamedNativeQuery

25
Q

Como se puede hacer paging y sorting

A
  1. Tendriamos que regresar un objeto Page
  2. Agregar un parametro al mismo metodo de tipo Pageable
  3. Agregar opcionalmente un Sort
  4. Pasar ese sort a el objeto pageable
26
Q

Cuales son las reglas si queremos hacer un repositorio customizado

A

La clase implementadora debe de tener el mismo nombre que la interfaz padre, esto lo podemos cambiar por ejemplo en el archivo xml en jpa:repositories base-package=”..” repository-impl-postfix=”CustomClass”, por medio de repository-impl-postfix podemos sobreescribir este comportamiento y decidir como se tendria que llamar nuesta clase implementadorta, pero por default deben de llamarse igual

27
Q

Para auditar que opciones tenermos

A

Spring data nos da las siguientes anotaciones, las cuales vamos a anotar en la entidad dependiendo lo que necesitemos

@CreatedBy

@CreatedDate

@LasModifiedBy

@LasModifiedDate

Y lo activamos ya sea por xml o por anotaciones

xml … jpa:auditing

anotacion—@EnableJpaAuditing

Debemos usar la interfaz AuditorAware

28
Q

Que opciones tenemos para el locking

A

El locking se hace por medio de una anotacion @Version y deoendiendo del valor y la estrategia que ocupemos tendremos el lock o no

  1. Optimistic—Si el numero de version no coincide manda una excepcion OptimisticLockException
  2. Pessimistic es similar a thread sincronizados, la informacion va a estar lock hasta que se termine la transaccion y nadie podra acceder a ella
  3. @Lock(LockModeType.PESSIMISTIC_WRITE) public void…..
29
Q
A