2010-06-21 640 views
25

¿Cuál es la sintaxis correcta de una instrucción de inserción de JPA? Esto puede parecer una pregunta fácil pero no he podido encontrar una respuesta.Declaración de inserción de JPA

Sé cómo hacerlo desde código Java, pero estoy buscando una manera de insertar objetos en la base de datos si se creó la base de datos.

¿Alguna idea?

+0

Aquí hay un buen caso en el que la respuesta menos correcta se marca como la solución adecuada. Por favor, considere marcar como válido, ya sea frm o Ben Hoffstein respuesta en su lugar. –

Respuesta

1

La opción que parece más prometedora hasta el momento es usar Flyway. Es una forma más automatizada de hacerlo y maneja el proceso de actualización de las bases de datos de manera básicamente automática.

26

No hay instrucción INSERT en JPA. Tienes que insertar nuevas entidades usando un EntityManager. Las únicas declaraciones permitidas en JPA son SELECCIONAR, ACTUALIZAR y ELIMINAR.

+1

He visto que se usa SQL nativo para este propósito, pero ¿cómo se puede escribir para todos los proveedores de bases de datos? Hibernate tiene una función de este tipo, puede incluir un archivo llamado "import.sql" en el classpath en tiempo de ejecución de Hibernate. En el momento de la exportación del esquema, ejecutará las declaraciones SQL contenidas en ese archivo una vez que el esquema haya sido exportado. Estoy buscando un enfoque más genérico ya que estoy usando Eclipselink. – javydreamercsw

16

Aquí hay good reference en objetos JPA persistentes utilizando un EntityManager. A modo de ejemplo, esta es la forma de insertar objetos utilizando el método de persistir:

EntityManager em = getEntityManager(); 
em.getTransaction().begin(); 

Employee employee = new Employee(); 
employee.setFirstName("Bob"); 
Address address = new Address(); 
address.setCity("Ottawa"); 
employee.setAddress(address); 

em.persist(employee); 

em.getTransaction().commit(); 
+1

Como mencioné, sé cómo hacerlo desde Java. Estoy buscando una forma de utilizar inserciones estándar cuando se crea la base de datos, además de la codificación en Java. – javydreamercsw

+0

Gotcha - lo siento, he entendido mal la pregunta. –

+0

No hay problema. ¡Gracias de todos modos! – javydreamercsw

5

Si desea insertar datos en la base de datos fuera de Java es necesario utilizar SQL nativo. Use SQL Standard para asegurarse de que la mayoría de las bases de datos puedan ejecutar el script. Cuando se ejecuta la aplicación, JPA realizará la asignación de los nuevos datos y los convertirá en objetos cuando sea necesario.

¿Cómo puedo asegurarme de que la secuencia de comandos funciona en todas las bases de datos? bueno, ese es el mismo problema que tiene cualquier DBA cuando hace Procedimientos de tienda o consultas nativas ... por eso existe JPA, para evitar hacerlo directamente en SQL, pero sé que a veces es necesario de esa manera.

Le sugiero que haga 3 scripts principales. Uno para Oracle, otro para SQL Server (hay algunos problemas en los tipos de datos de fecha de las versiones de 2005 a 2008, así que tenga cuidado) y uno para MySQL. Comience su script con SQL estándar y cuando lo pruebe en estas bases de datos encontrará algunas correcciones que deberá hacer para cada DBMS.

Una vez que lo tiene puede hacer un archivo de script de archivo (* .sql) y ejecutarlo con el administrador de base de datos. Si funciona, ejecute el servidor, ponga la aplicación en línea y la información se integrará perfectamente.

+0

Esta es la forma en que terminé haciéndolo. Estaba buscando una forma más automática, pero tuve que codificarlo para hacer este tipo de trabajo. – javydreamercsw

Cuestiones relacionadas