2010-10-15 20 views
7

Cuando creo (usando JPA - api de persistencia java) una unidad de persistencia y luego entidades de persistencia, crean automáticamente las tablas y campos correspondientes en la base de datos.Crear base de datos con JPA?

¿Puedo hacer la creación automática de la base de datos (si no existe)?

Mi objectif es:

quiero decir que crea dentro de la base de datos de las tablas y los campos, pero no la base de datos, y si la base de datos no se ha creado antes (con la mano) - todo falla. Entonces, antes de ejecutar el proyecto (que generará automáticamente las tablas y los campos si es necesario) primero debo crear (a mano) una base de datos.

que utilizo: Eclipse (Java, Hibernate, Flex/Aire), MySQL

Gracias por toda la información

+0

ver http://opensource.atlassian.com/projects/hibernate/browse/HHH-1853 – Bozho

+0

Si bien entiendo la intención, me parece que esto es una muy mala idea. Personalmente, no usaría el mismo usuario para la aplicación que el usuario utilizado para crear una base de datos. –

Respuesta

8

La base de datos tiene que ser creado manualmente (Por suerte no te preguntas por qué ;-). Lo cual es similar a la combinación de usuario/contraseña que usa para conectarse a su servidor de base de datos, que ya debe existir para conectarse al DB.

2

Mi solución a este problema fue la de añadir el siguiente justo antes de crear mi gestor de la entidad:

Connection connection = 
     DriverManager.getConnection("jdbc:mysql://localhost/?user=" + DB_USER); 
    Statement stmt = connection.createStatement(); 
    stmt.executeUpdate("CREATE DATABASE IF NOT EXISTS " + DB_NAME); 

Tendrá que ya sea que la rodean con un bloque try/catch o agregar una excepción de SQL tiros a la notación la función en la que existe. Así, por ejemplo, aquí está mi initEntityManager función:

public static void initEntityManager() throws SQLException { 
    Connection connection = 
     DriverManager.getConnection("jdbc:mysql://localhost/?user=" + DB_USER); 
    Statement stmt = connection.createStatement(); 
    stmt.executeUpdate("CREATE DATABASE IF NOT EXISTS " + DB_NAME); 
    emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); 
    em = emf.createEntityManager(); 
} 
Cuestiones relacionadas