Actualmente estoy usando Eclipselink, pero ahora sé que la mayoría de las implementaciones de JPA han sido bastante estandarizadas. ¿Hay una forma nativa de asignar una entidad JPA a una vista? No estoy buscando insertar/actualizar, pero la pregunta es cómo manejar la anotación @Id. Cada entidad en el mundo de JPA debe tener un campo de ID, pero muchas de las vistas que he creado no se ajustan a esto. ¿Hay soporte nativo para esto en el JPA o necesito usar hacks para que funcione? He buscado mucho y he encontrado muy poca información sobre cómo hacer esto.¿JPA admite el mapeo de vistas sql?
Respuesta
Durante el uso de la anotación @Id
con los campos de tipos soportados directamente no es la única manera de especificar la identidad de una entidad (ver @IdClass
con múltiples @Id
anotaciones o @EmbeddedId
con @Embedded
), la especificación JPA requiere una clave primaria para cada entidad.
Dicho esto, no es necesario que las entidades usen JPA con las vistas de la base de datos. Como la asignación a una vista no es diferente de la asignación a una tabla desde una perspectiva de SQL, aún puede usar consultas nativas (createNativeQuery
en EntityManager
) para recuperar valores escalares.
He estado investigando esto por mí mismo, y he encontrado un truco que no estoy 100% seguro pero funciona pero parece prometedor.
En mi caso, tengo una columna FK en la vista que efectivamente puede funcionar como PK: cualquier instancia dada de ese objeto extraño solo puede ocurrir una vez en la vista. Definí dos objetos fuera de ese campo: uno se designa como ID y representa el valor bruto del campo, y el otro se designa como de solo lectura y representa el objeto al que se hace referencia.
@Id
@Column(name = "foreignid", unique = true, nullable = false)
public Long getForeignId() {
...
@OneToOne
@JoinColumn(name = "foreignid", insertable=false, updatable=false)
public ForeignObject getForeignObject() {
...
como he dicho, no estoy 100% seguro en este caso (y sólo voy a borrar esta respuesta si resulta que no trabajar), pero tiene mi código más allá de un punto de choque en particular.
No obstante, si se aplica a su situación específica. Y hay una excelente posibilidad de que después de 11 meses ya no te importe. :-) Qué demonios, esa insignia de "Nigromante" no solo se gana a sí misma ...
En mi opinión, tengo una identificación "única", así que la traduje como la identificación de la entidad. Funciona muy bien:
@Entity
@Table(name="table")
@NamedQuery(name="Table.findAll", query="SELECT n FROM Table n")
public class Table implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="column_a")
private int columnA;
- 1. Fluido Mapeo Nhibernate de vistas SQL
- 2. ¿Fluent-NHibernate admite el mapeo de procedimientos?
- 3. Mapeo de herencia con JPA/Hibernate
- 4. ORM que admite el mapeo de tipos genéricos
- 5. error en JPA mapeo - Fetch Comentarios
- 6. Vistas SQL - sin variables?
- 7. Usar vistas en SQL
- 8. Mapeo unidireccional unificado JPA/Hibernate con clave primaria compartida
- 9. PostGIS y JPA 2.0
- 10. vistas actualizables - SQL Server 2008
- 11. Consulta JPA - inyección sql en parámetros posicionales jpa consulta nativa
- 12. Vistas SQL en SubSonic 3.0
- 13. Asignación de la vista SQL a la entidad JPA
- 14. scala hibernate/jpa - ignore el mapa de bits autogenerado $ init $ 0 mapeo
- 15. Creación de vistas de solo lectura en el servidor Sql
- 16. columnas de MyBatis mapeo
- 17. ¿Cuál es el propósito de las vistas en SQL?
- 18. Dapper mapeo mapeo intermedia
- 19. ¿Admite MS-SQL las tablas en memoria?
- 20. ¿LINQ-to-SQL admite consultas compostables?
- 21. ¿SQL Compact Edition admite índices agrupados?
- 22. Vistas del servidor SQL, bendición o maldición?
- 23. Eliminar todas las vistas desde SQL Server
- 24. SQL Server 2008 - sp_refreshview bombardeando algunas vistas
- 25. SQL Server entre vistas de catálogo, las vistas de esquema de información vs DMV
- 26. JDBCRealm con JPA
- 27. Proveedor de persistencia para Java que admite los campos finales
- 28. ¿Admite node.js el rendimiento?
- 29. ¿El iterador admite + operador?
- 30. El mapeo ElasticSearch no funciona
Vistas funciones como tablas normales, por eso si usted vistas no encaja bien con la APP ORM mapeo en su lugar puede utilizar un procedimiento almacenado para devolver un cursor personalizado formado a partir de la vista (s). Puede asignar procedimientos almacenados en EclipseLink usando la anotación @NamedStoredProcedureQuery. Para obtener más información sobre este Google para "Extensiones EclipseLink". –