tutorial repositorios repositories qué persistencia example ejemplos data curso consultas spring spring-data spring-data-jpa spring-data-rest

repositories - Repositorios múltiples para la misma entidad en Spring Data Rest



spring persistencia (3)

¿Es posible publicar dos repositorios diferentes para la misma entidad JPA con Spring Data Rest? Les di a los dos repositorios diferentes rutas y nombres de pila, pero solo uno de los dos está disponible como punto final REST. El punto por el que tengo dos repositorios es que uno de ellos es un extracto, que muestra solo los campos básicos de una entidad.


La parte terrible no es solo que solo puede tener 1 repositorio de repositorio de datos spring (@RepositoryRestResource) por entidad, sino también que si tiene un @Repository JPA regular (como CrudRepository o PagingAndSorting) también interactuará con el resto de datos de Spring ( como la clave en el mapa es la propia entidad). Perdió bastantes horas depurando la carga aleatoria de uno u otro. Supongo que si se trata de una limitación difícil del descanso de datos de Spring, al menos se podría lanzar una Excepción si la clave del mapa ya está allí cuando se intenta anular el valor.


La respuesta parece ser: solo hay un repositorio posible por entidad.


Por lo tanto, esto no responde directamente a la pregunta, pero puede ayudar a resolver el problema subyacente.

Solo puede tener un repositorio por entidad ... sin embargo, puede tener varias entidades por tabla; Así, teniendo múltiples repositorios por tabla.

En un poco de código que escribí, tuve que crear dos entidades ... una con una identificación generada automáticamente y otra con una identificación preestablecida, pero ambas apuntando a la misma tabla:

@Entity @Table("line_item") public class LineItemWithAutoId { @Id @GeneratedValue(generator = "system-uuid") @GenericGenerator(name = "system-uuid", strategy = "uuid") private String id; ... } @Entity @Table("line_item") public class LineItemWithPredefinedId { @Id private String id; ... }

Entonces, tuve un repositorio para cada uno:

public interface LineItemWithoutId extends Repository<LineItemWithAutoId,String> { ... } public interface LineItemWithId extends Repository<LineItemWithPredefinedId,String> { ... }

Para el número publicado, podrías tener dos entidades. Una sería la entidad completa, con captadores y definidores para todo. La otra, sería la entidad, donde hay configuradores para todo, pero solo obtendrán para los campos que desea hacer públicos. ¿Esto tiene sentido?