¿Cuáles son las diferencias de muchos a muchos enfoque de mapeo -- spring campo con orm campo con spring-data-jpa campo con spring-rest campo con spring-hateoas camp Relacionados El problema

What are differences in many to many mapping approach


1
vote

problema

Español

Quiero muchos a muchos relación con la asignación explícita tabla de unión.

Mi proyecto java primavera está proporcionando API REST en formato HAL y ahora sólo tiene dos tipos de clasificados:

  • entidades definidas y
  • "vacío" interfaces para repositorios (anotado por @RepositoryRestResource).

Nota al margen, las dependencias son alrededor de éstos:

  spring-boot-starter-parent spring-boot-starter-data-jpa spring-boot-starter-data-rest spring-data-rest-hal-browser postgresql / h2 spring-boot-starter-hateoas   

Las relaciones entre tablas (I _links medias de los recursos de descanso. Echar un vistazo a muestra hal + JSON documento y buscarse un ea:basket , por ejemplo.) funcionan como se espera y se está trabajando "de forma gratuita", a causa de polvo mágico de la primavera de auto-configuración y otra magia incluido.

Ahora estoy luchando al agregar nueva dependencia de muchos a muchos.

Tengo las entidades A, B y Tag. Quiero tener cualquier número de entidades de la etiqueta que se asocia con un Un entidades B. No tengo ninguna necesidad de tener cualquier lista / conjunto de entidades A y B (voy a utilizar jooq si necesito algo más de porquería).

Primer problema / pregunta:

Veo al menos tres enfoques para modelar muchos a muchos relación con explícita tabla de unión (para ser capaz de modelar mis necesidades de asociación) y no sé diferencias. ¿Cuáles son las diferencias de estos enfoques :

  1. usar clave compuesta integrable en la tabla de unión como sugieren Vlad? https://vladmihalcea.com/the-best-way-to-map-a-many-to-many-association-with-extra-columns-when-using-jpa-and-hibernate /
  2. enfoque de uso @IdClass como se ha dicho aquí: https://stackoverflow.com/a/3588400/11152683
  3. utilizar múltiples @Id en tabla de unión, como se muestra aquí: https://hellokoding.com/jpa-many-to-many-extra-columns-relationship-mapping-example-with-spring-boot-hsql/ < / li>

segunda pregunta: ¿Qué enfoque es necesario en mi caso a las asociaciones fácilmente modelo y crea polvo mágico haga su trabajo al proporcionar formato de HAL en repositorios crud. Me refiero a que los enlaces de las relaciones serán generados automágicamente.

Original en ingles

I want many to many relation mapping with explicit join table.

My java spring project is providing REST api in HAL format and now it has only two types of classed:

  • entities defined and
  • "empty" interfaces for repositories (annotated by @RepositoryRestResource).

Sidenote, dependencies are circa these:

spring-boot-starter-parent spring-boot-starter-data-jpa spring-boot-starter-data-rest spring-data-rest-hal-browser postgresql / h2 spring-boot-starter-hateoas 

Relations between tables (I mean _links of rest resources. have a look at sample hal+json document and look for ea:basket for example.) are working as expected and it is working "for free", because of magic powder from spring auto-configuration and other magic included.

I am struggling now when adding new many to many dependency.

I have entities A, B and Tag. I want to have any number of Tag entities to be associated with A an B entities. I have no need to have any list/set in A and B entities (I will use jooq if I need anything more than crud).

First problem/question:

I see at least three approaches to model many to many relation with explicit join table (to be able to model my association needs) and I do not know differences. What are differences of these approaches?:

  1. use embeddable composite key in join table as Vlad suggest? https://vladmihalcea.com/the-best-way-to-map-a-many-to-many-association-with-extra-columns-when-using-jpa-and-hibernate/
  2. use @IdClass approach as stated here: https://stackoverflow.com/a/3588400/11152683
  3. use multiple @Id in join table as shown here: https://hellokoding.com/jpa-many-to-many-extra-columns-relationship-mapping-example-with-spring-boot-hsql/

Second question: What approach is needed in my case to easily model associations and make magic powder do its work when providing HAL format in crud repositories. I mean that links of relations will be generated automagically.

              
 
 

Lista de respuestas

0
 
vote
vote
La mejor respuesta
 

Para hacer que la asociación de 22 personas funcione bien con las cosas de descanso de los datos de primavera y proporcione a la representación de Hal con cosas correctas, primero conoce un poco de JPA / Hibernate. Hay dos enfoques (1 y 2 de la pregunta, ya que el tercero solo es atajo para la segunda y trabaja en hibernación solamente).

Ambos enfoques se muestran en la prueba de concepto Repositorio en tags Branch . Yo uso el repositorio dado para probar varias configuraciones de proyecto.

Enfoque 1, EmbedDedid . Utiliza la cosa hackish en la clase FixConfig en BackendidConverter Bean, donde utiliza BookRepository para obtener la entidad de libros cuando analiza la ID de solicitud de URL en la clase de identificación incorporable.

enfoque 2, IDCLASS . Está utilizando enteros planos INT su Clase de identificación y parece ser una solución correcta.

Creo que el primer enfoque puede modificarse para trabajar de manera similar como la segunda, pero no puedo hacerlo por ahora.

Marcaría como solución cualquier respuesta que proporcione una idea de "por qué" es así.

 

To make many2many association work nicely with spring data rest things and provide HAL representation with correct things, you have first know a bit of JPA/Hibernate. There are two approaches (1 and 2 from question, as third is only shortcut for second one and working in Hibernate only.).

Both approaches are shown in proof of concept repository in tags branch. I use given repository to test various set-ups of project.

Approach 1, EmbeddedId. It does use hackish thing in FixConfig class in BackendIdConverter bean, where it uses bookRepository to get Book entity when it parses request id from url onto embedable id class.

Approach 2, IdClass. It is using plain Integers int its IdClass and does seem to be correct solution.

I think that first approach can be modified to work similarly as second, but I am not able to do it for now.

I would mark as solution any answer providing some insight for "why" it is like this.

 
 

Relacionados problema

8  Cómo crear una nueva entidad matriz que hace referencia a una entidad infantil ya existente en el resto de datos de primavera / HIKOAS  ( How to create a new parent entity that references an already existing child enti ) 
En mi proyecto tengo dos modelos de dominio. Un padre y una entidad infantil. Las referencias de los padres que una lista de niños entiende. (por ejemplo, pub...

2  Descanso de los datos de la primavera: cómo actualizar las entidades en colecciones infantiles de agregados  ( Spring data rest how to update entities in child collections of aggregates ) 
Siguiendo los principios de DDD y usando los datos de primavera. REST / HIKEAAS cuál es la mejor manera de manipular las entidades en las colecciones de niños...

1  Cómo agregar enlace a una entidad de colección  ( How to add link to a collection entity ) 
Tengo un repositorio de datos de primavera como ese: @RepositoryRestResource(collectionResourceRel = "items", path = "items") public interface ItemReposito...

0  URL DE PRIMAVERA / RESTO / V1 está agregado  ( Spring rest url rest v1 is beeing added ) 
Estoy trabajando en un proyecto existente en el que los concontrolladores de Resto tienen un mensaje de repuesto @RequestMapping(value = "/test") . Hay no ...

6  Cambio del formato JSON para el descanso de los datos de resorte  ( Changing the json format for spring data rest ) 
Actualmente spring-data-rest está devolviendo JSON en formato HAL en un proyecto spring-boot6 Estoy usando una frontend de Ember.js y quiero usar JSONAPI (...

2  Descanso de los datos de la primavera: representación de proyección de un solo recurso  ( Spring data rest projection representation of single resource ) 
Tengo un simple UserRepository que expuso usando Spring Data REST . Aquí está el User Clase de entidades: @Document(collection = User.COLLECTION_NAME)...

0  CHAGE EN FORMATO DE PROPORCIONES DE RESTIDOS DE DATOS DE SPRINACION EN VERDADERA DE DIABLECIMIENTO DE SPRING-DATA-REST-WEBMVC 2.2.1.Release  ( Chage in spring data rest output format in spring data rest webmvc version 2 2 1 ) 
Estoy usando la web MVC 2.2.1.Release. Estoy esperando en el siguiente formato { "content": [ { "price": 499.00, "description": "Apple ...

0  Cómo usar los HIKOS DE SRANTE CON PLAY JACKSON  ( How to use spring hateoas with plain jackson ) 
Quiero convertir manualmente una clase de datos a su representación de JSON. La clase de datos debe implementar enlaces de tipo HIKOAS. Se puede encontrar un ...

1  Excluir "Enlaces" vacíos "en la respuesta de Restapi de arranque de primavera  ( Exclude empty hateoas links in the spring boot restapi response ) 
Tengo una clase de respuesta de muestra que extiende el Modelo de representación. En algunos escenarios, no agrego ningún enlace de HIKOAS en la respuesta. En...

2  ¿Cómo funciona LinkFORSINGERSINGEROURCE?  ( How does linkforsingleresource work ) 
Puedo entender que este código encuentra el BookController porque hago Dim wb As Workbook Dim Disciplinas As Worksheet Set wb = ThisWorkbook Set Disciplinas ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos