Hibernate complementado con Java)

¿Te gustaría aprender Hibernate?
Tenemos los cursos que necesitas. ¡Haz clic aquí!

1. El valor predeterminado en la anotación JPA hibernate

  • Tanto el nombre de la tabla como el del campo deben ser los mismos que para el objeto Entity, no es necesario repetir la configuración
  • Usando ImprovedNamingStrategy en sessinFactory, puede asignar automáticamente nombres de columna subrayados como LOGIN_NAME al atributo loginName.
  • En una relación de muchos a muchos, el nombre predeterminado de @JoinTable es «nombre de tabla principal nombre_tabla secundaria»

2. Caché secundario hibernate

No todos los objetos son adecuados para el almacenamiento en caché de segundo nivel. La gran verdad de King:

  • Las actualizaciones son mucho más pequeñas que las lecturas.
  • No importante: por ejemplo, los datos de CMS, los datos financieros son innecesarios.
  • Independiente: no es necesario mantener la misma tabla con el sistema heredado.

La más adecuada es la tabla de referencia, que tiene una pequeña cantidad de datos y muchas clases conectadas, como una tabla de región y una tabla de roles.

Cuatro niveles de aislamiento:

  • Transaccional solo se usa en el entorno JTA.
  • Lectura-escritura confirmación lectura (esta transacción solo puede ver los datos confirmados por otra transacción. No leer repetidamente).
  • La lectura y escritura no estrictas no garantiza en absoluto el acceso concurrente, y se utiliza para tablas que rara vez se actualizan o tablas con datos sucios.
  • Solo lectura Solo ejecute crear, no actualizar los datos. Favorito para el entorno de clúster.

Generalmente, elija entre lectura-escritura y lectura-escritura no estricta. De manera predeterminada, use lectura-escritura.

Selección generalEhcacheComo caché secundaria, y utiliza su esquema distribuido RMI, envía sincrónicamente información no válida para lograr la sincronización del clúster.

Hay tres tipos de caché, y generalmente solo se usan los dos primeros:

  • Caché de segundo nivel: objetos y atributos de caché. Se recomienda.
  • Caché de recopilación: la ID de la recopilación asociada con el objeto de caché, se recomienda utilizar
  • Caché de consulta: guarde en caché el tipo de resultado de la consulta y la ID, no se recomienda. Como se utiliza el resultado de la consulta en la memoria caché, se determina comparando las tablas involucradas en la consulta y el último tiempo de actualización de cada tabla. El último tiempo de actualización de cada tabla debe sincronizarse en tiempo real en el clúster, lo cual es muy problemático.
Hibernate Logotipo Vector - Descarga Gratis SVG | Worldvectorlogo

3.equals() and hashCode()

Se presenta en detalle en el Capítulo 9 de Hibernate en la Acción 2>. Hibernate puede garantizar que siempre devolverá el mismo objeto Java al mismo ID de base de datos dentro del alcance de su sesión. Solo cuando coloca el VO ensamblado a partir de parámetros POST o el Objeto separado obtenido de la sesión anterior, y otro PO o VO que representa el mismo objeto de base de datos en las mismas colecciones de base hash (como Set), Java Set Te deprimirá, Set pensará que estos son dos objetos. Entonces, este es un problema inherente con las colecciones de hash-base, Hibernate simplemente lo expone nuevamente. En el modo Hibernar una sesión por solicitud, la situación seguirá ocurriendo. Por ejemplo, obtenga el objeto OrderItem de los parámetros de la página y colóquelo en el conjunto Order-> OrderItems que se encuentra en la base de datos. Si su objeto no necesita colocarse en un Conjunto (como un objeto hijo de otro objeto), o evitará esquemas que colocan dos objetos que representan el mismo objeto de la base de datos en el mismo Conjunto, puede evitar la sobrecarga.

Si debe recargar, hay tres estrategias

  • La columna de ID se utiliza para la comparación, que está cerca de la comparación de ID de la base de datos, pero Hibernate no tiene un valor de ID antes de la persistencia. Será problemático cuando se trata de elementos nuevos.
  • Compare todas las columnas, excepto la columna ID y la columna Collesions (porque las colisiones representan otra tabla), que está más cerca de la comparación de Java, pero hay problemas con esto, como la ausencia de una buena combinación única en las columnas restantes.
  • La clave principal de negocios se utiliza para la comparación. Esta es la única forma en que King está relativamente satisfecho. Sin embargo, el programador tiene que elegir la clave de negocios única con cuidado y cambiar el trabajo físico por trabajo intelectual.
JPA Associations » JavaTuto

4. Cuatro estrategias de recuperación hibernate

Cuatro estrategias de perezoso a activo en orden.

  • Perezoso: Parece que la mayoría de la gente solo usa esta estrategia. Consultar un lote de pedidos y devolver solo instancias de pedido. Al acceder a los artículos de un pedido, consulte los artículos de un pedido determinado. Esta estrategia generará la famosa consulta N + 1. Por ejemplo, al consultar todos los pedidos y luego consultar sus artículos, se emitirá una declaración de consulta para cada artículo de pedido. (Tenga en cuenta que solo se verifica un Pedido, y luego todos los artículos que lo iteren no serán N + 1)
  • Lote: consulta un lote de pedidos y solo devuelve instancias de pedido. Al acceder a los artículos de un pedido determinado, consulta por lotes un cierto número de artículos del pedido (como 10 pedidos). Si necesita iterar sobre todos los artículos de la orden, necesita N / 10 + 1 declaraciones. Por supuesto, la premisa de adoptar este modelo es que necesita algunos, pero no todos los artículos de pedido.
  • Subseleccionar: cuando todavía se consulta un lote de pedidos, solo se devuelve la instancia de pedido. Al acceder a los artículos de un pedido, consultar los artículos de todos los pedidos requiere dos declaraciones. Adecuado para situaciones donde los artículos no son necesariamente necesarios, y todos son necesarios si es necesario.
  • Ansioso: solo hay una declaración, que devuelve instancias de pedido y artículos cuando se consulta. Es adecuado para el caso donde se necesitan todos los artículos.

Parece que la situación de Lazy, SubSelect, Eager es muy clara. Batch está en algún lugar entre Lazy y SubSelect, y funciona bien cuando se usa bien. Desafortunadamente, la anotación no se puede cambiar dinámicamente a nivel de sesión, ya que es global.

Hibernate - OneToOne, OneToMany, ManyToOne y ManyToMany - Adictos al trabajo

5. Cascada

1. Si un nuevo objeto secundario se inserta en un nuevo objeto, el nuevo objeto secundario persiste cuando el nuevo objeto persiste: @ManyToMany (cascade = {CascadeType.PERSIST, CascadeType.MERGE})
2. Elimine el objeto secundario asociado: @ManyToMany (cascade = {CascadeType.REMOVE})
3. 1+2:     @ManyToMany(cascade ={  CascadeType.ALL  })
4. Al eliminar un objeto antiguo, si sus objetos secundarios ya no son referenciados por otros objetos, esto es exclusivo de Hibernate

 @org.hibernate.annotations.Cascade(value = org.hibernate.annotations.CascadeType.DELETE_ORPHAN)

5. @ ManyToMany eliminar datos en cascada de la tabla intermedia JoinTable

Si se elimina el objeto principal en ManyToMany, los datos de la tabla intermedia se eliminarán automáticamente

Si se elimina el objeto secundario (@JoinTable no está definido, solo se define el objeto mappedBy), la tabla intermedia no se eliminará automáticamente y se debe ejecutar el siguiente código:

 public void delete(Long id) {		Role role = this.get(id);		for (User user : role.getUsers()) {			user.getRoles().remove(role);		}		super.delete(role);	}

6. Varios

Clasificación de objetos de colección:

La colección debe ser ordenable, como List, LinkedHashSet, etc. Tenga en cuenta que en Set y Map, si la propiedad se debe inicializar explícitamente, debe escribirse como Private Set <Role> roles = new LinkedHashSet <Role> (). Si es un HashSet, todavía está fuera de servicio. Zh

Utilice @OrderBy («Publicar fecha desc, precio») para especificar el orden. El valor predeterminado es el orden ascendente ASC y las declaraciones relacionadas se insertarán en SQL.
Pasos de operación de descarga:

  1. all entity insertions, in the same order the corresponding objects were saved using Session.save()
  2. all entity updates
  3. all collection deletions
  4. all collection element deletions, updates and insertions
  5. all collection insertions
  6. all entity deletions, in the same order the corresponding objects were deleted using Session.delete()

Método de replicación:

session2.replicate (cat, ReplicationMode.LATEST_VERSION); Copie el objeto cat de la sesión1 a la sesión 2. Si cat ya existe en la sesión2, use una de las estrategias.

Al insertar y actualizar en lotes:

Session.flush () debe realizarse periódicamente para reducir el tamaño de la caché lvl 1.

Hibernate filters:

 <class name=»myClass» …>
    …
    <filter name=»myFilter» condition=»:myFilterParam > MY_FILTERED_COLUMN»/>
</class>

session.enableFilter(«myFilter»).setParameter(«myFilterParam», «some-value»);

No admite la recuperación por id.

Fillter Collctions:

Filtre las colecciones de objetos relacionadas para que user.getRoles () de carga diferida no devuelva todos los objetos relacionados y pueda regresar por condiciones y regresar por paginación.

Hibernate complementado con Java)

StatelessSession:

No hay contexto de persistencia, por lo que no hay caché lvl1, nivel 2 y caché de consulta; no hay comprobación y guardado automático del estado, y se debe llamar explícitamente session.update (); no se obtienen objetos asociados; no se llama a ningún evento / inceptor.<!– <rdf:RDF xmlns:rdf=»http://www.w3.org/1999/02/22-rdf-syntax-ns#» xmlns:dc=»http://purl.org/dc/elements/1.1/» xmlns:trackback=»http://madskills.com/public/xml/rss/module/trackback/»> <rdf:Description rdf:about=»http://wiki.springside.org.cn/display/calvin/Hibernate+and+JPA+Notes» dc:identifier=»http://wiki.springside.org.cn/display/calvin/Hibernate+and+JPA+Notes» dc:title=»Hibernate and JPA Notes» trackback:ping=»http://wiki.springside.org.cn/rpc/trackback/4346″ /> </rdf:RDF> –><!– Root decorator: all decisions about how a page is to be decorated via the inline decoration begins here. –><!– Switch based upon the context. However, for now, just delegate to a decorator identified directly by the context. –>

Te esperamos en los siguientes artículos en donde hablaremos más acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.

¿Te gustaría aprender Hibernate?
Tenemos los cursos que necesitas. ¡Haz clic aquí!

About Author

NGuerrero

0 0 votos
Article Rating
Suscribir
Notificar de
guest
0 Comments
Comentarios.
Ver todos los comentarios
0
¿Te gusta este articulo? por favor comentax