2010-10-15 10 views
7

Lorsque je crée (à l'aide de l'API JPA - persistance java) une unité de persistance puis des entités de persistance, elles créent automatiquement les tables et les champs correspondants dans la base de données.Créer une base de données avec JPA?

Puis-je également faire pour créer automatiquement la base de données (si elle n'existe pas)?

Mon est Objectif:

Je veux dire qu'il crée à l'intérieur de la base de données des tables et des champs, mais pas la base de données, et si la base de données n'a pas été créée avant (à la main) - tout échoue. Donc, avant d'exécuter le projet (qui générera automatiquement les tables et les champs si nécessaire), je dois d'abord créer (à la main) une base de données.

J'utilise: Eclipse (Java, Hibernate, Flex/Air), MySQL

Merci pour toutes les informations

+0

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

+0

Même si je comprends l'intention, je trouve cela un très mauvaise idée. Personnellement, je n'utiliserais pas le même utilisateur pour l'application que l'utilisateur utilisé pour créer une base de données. –

Répondre

8

La base de données doit être créée manuellement (amuserez vous ne demandez pas pourquoi ;-). Ce qui est similaire à la combinaison utilisateur/mot de passe que vous utilisez pour vous connecter à votre serveur de base de données, qui doit déjà exister pour vous connecter à la base de données.

2

Ma solution à ce problème est d'ajouter le droit suivant avant que je crée mon gestionnaire d'entités:

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

Vous devrez soit entourer que d'un bloc try/catch ou ajouter une throws notation SQLException à la fonction dans laquelle il existe. Ainsi, par exemple, voici ma fonction initEntityManager:

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(); 
} 
Questions connexes