java - idea - hibernate reverse engineering intellij
Intellij IDEA: especifique el origen de datos para la validaciĆ³n de JPA (7)
Además de configurar una fuente de datos como otros han mencionado, para borrar estos errores falsos, en el panel Base de datos, tuve que ir a la configuración, pestaña Esquemas y tablas, y presionar la casilla de verificación a la izquierda de la tabla "information_schema" para mi base de datos.
Tengo un proyecto de primavera para una pequeña aplicación web configurada en Intellij IDEA.
Utiliza JPA en la parte superior de Hibernate para la capa de persistencia. El origen de datos (MySQL) se define en el contexto de la aplicación Spring:
<!-- Values are configured via the property override -->
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" >
<property name="driverClassName" value=""/>
<property name="url" value=""/>
<property name="username" value=""/>
<property name="password" value=""/>
</bean>
El valor real se lee de un archivo de propiedades y Spring lo utiliza en tiempo de ejecución mediante el mecanismo de anulación de propiedades.
Y luego el origen de datos se inyecta en la fábrica del administrador de entidades en el mismo contexto de aplicación:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="myDataSource"/>
</bean>
Finalmente, el administrador de la entidad inyectó en los DAO usando una anotación:
/**
* Shared, thread-safe proxy for the actual transactional EntityManager
*/
@PersistenceContext
private EntityManager em;
Todo funciona bien cuando lo construyo y lo despliego a Tomcat, pero la validación JPA de Intellij no parece entender de dónde obtener la fuente de datos.
En mis entidades, los nombres de las tablas y los nombres de las columnas están subrayados en rojo y el mensaje de validación es "no se puede resolver la tabla" o "no se puede resolver la columna":
@Entity
@Table(name = "domain")
public class Domain extends AbstractAgendaEntity {
En este ejemplo, es la parte de "domain"
que no se considera válida.
He configurado manualmente mi base de datos en la ventana de la herramienta "Base de datos", puedo ver mis tablas y realizar consultas SQL en la consola.
¿Cómo puedo decirle a Intellij que use esta fuente de datos para resolver nombres de tablas para mis entidades JPA?
Asegúrese de importar javax.persistence.Table
y javax.persistence.Column
dentro de las clases de entidad.
Entonces, en la parte superior de cada clase, busque:
import javax.persistence.Table;
import javax.persistence.Column;
Esto importará las anotaciones JPA correctas en su clase.
Finalmente descubrí cómo hacer esto.
La clave es la ventana de herramientas de "persistencia". Aparentemente está disponible después de agregar la faceta JPA, pero es una ventana de herramientas separada.
Para abrirlo: menú "ver" -> Herramientas de Windows -> Persistencia
En esta ventana, verá su aplicación con los diferentes elementos relacionados con la persistencia (veo persistence.xml
, entityManagerFactory
desde Spring context, y myUnit
que no sé de dónde viene.
Aquí puede hacer clic con el botón derecho en cualquier elemento y seleccionar "Asignar origen de datos".
Esto abre un cuadro de diálogo emergente con una pequeña tabla que contiene los elementos de persistencia en la columna izquierda y la fuente de datos asignada en la columna de la derecha. Puede asignar una fuente de datos desde la ventana "Base de datos" allí, así que elegí la fuente de datos que había configurado para mi base de datos MySQL y voilà, los errores de validación desaparecieron.
Pero si ingreso una tabla incorrecta o un nombre de columna, sigo recibiendo un error, que es bastante claro.
Hay algunas cosas que debes hacer. Primero, configure una faceta de Hibernate en la configuración de su estructura de proyecto. Puede seleccionar su archivo de configuración de Hibernate en este punto o crear uno nuevo. Luego debe configurar sus fuentes de datos en la ventana de la Base de datos (Ver-> Herramientas Ventana-> Base de datos). Recuerde establecer el dialecto de la base de datos en la pestaña Consola en la ventana de la base de datos. Finalmente, debe ir a la ventana Persistencia (Ver-> Herramientas Ventana-> Persistencia) y agregar una fuente de datos a la faceta apropiada. Simplemente haga clic derecho en el icono de la derecha en el árbol y seleccione "Agregar origen de datos". La columna Fuente de datos tiene un menú desplegable que contiene todas las fuentes de datos que ha configurado. IntelliJ luego identifica correctamente las tablas.
Una palabra de advertencia. A partir de v12.04, IntelliJ no modifica su archivo de configuración de Hibernate. Aún necesita asignar sus clases y agregar manualmente los detalles de su base de datos.
Lo primero que tiene que agregar fuente de datos en su IDE. Puede hacerlo en la pestaña "Base de datos" generalmente en el lado derecho. Puede importar esta fuente de datos desde su código. Debe asegurarse de presionar el botón Actualizar tablas. IDEA cargará tablas y las usará para validación. Luego, debe introducir su configuración de faceta JPA en esta fuente de datos.
Para JPA no se puede resolver la tabla / columna. Si todo funciona y solo te molesta la marca de error roja, puedes cambiar la configuración de inspección de Error a Advertencia: -
File --> Settings --> Inspections --> JPA issues --> Unresolved database references in annotations
.
Tenía la fuente de datos configurada correctamente, pero los nombres de las columnas no se mostraron. Después de cambiar el esquema y el catálogo como a continuación, todo se reconoció correctamente.
@Entity
@Table(name = "stock_detail", schema = "testing", catalog = "")
public class Xyz {
// ...