Hibernate ne crée pas automatiquement une table qui n'existe pas dans la base de données
Je avoir une base de code Hibernate,
J'ai mis la propriété "mise en veille prolongée.hbm2ddl.auto" en tant que mise à jour encore il n'est pas de l'auto-création de la table dans la Base de données.
Ce sont les fichiers requis:
employee.hbm.xml
<hibernate-mapping>
<class name="contacts.employee" table="contacts">
<meta attribute="class-description"></meta>
<id column="contactId" name="contactId" type="string">
<generator class="assigned"/>
</id>
<property column="contactName" length="100" name="contactName" not-null="true" type="string"/>
<property column="password" length="100" name="password" not-null="true" type="string"/>
<set cascade="all" name="groupOfResponsibilities" table="employee_responsibilty">
<key column="contactId"/>
<many-to-many class="contacts.responsibilities" column="responsibilityId"/>
</set>
</class>
</hibernate-mapping>
responsibility.hbm.xml
<hibernate-mapping>
<class name="contacts.responsibilities" table="responsibilities">
<meta attribute="class-description">
This class list of responsibilities if an employee
</meta>
<id column="responsibilityId" name="responsibilityId" type="long">
<generator class="increment"/>
</id>
<property column="responsibilityName" name="responsibilityName" type="string"/>
</class>
</hibernate-mapping>
hibernate.cfg.xml
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLMyISAMDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/****</property>
<property name="hibernate.connection.username">*****</property>
<property name="hibernate.connection.password">*****</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>
<mapping resource="contacts/employee.hbm.xml"/>
<mapping resource="contacts/responsibilitiy.hbm.xml"/>
</session-factory>
</hibernate-configuration>
C'est le Main.java que je suis en train de lancer:
public class Main {
public static void main(String[] args) {
SessionFactory sessionfactory = NewHibernateUtil.getSessionFactory();
Transaction transaction = null;
try {
Session session = sessionfactory.openSession();
transaction = session.beginTransaction();
Set<responsibilities> groups = new HashSet<responsibilities>();
responsibilities responsibilityOne=new responsibilities("Java");
responsibilities responsibilityTwo=new responsibilities("SQL");
responsibilities responsibilityThree=new responsibilities("Oracle");
groups.add(responsibilityOne);
groups.add(responsibilityTwo);
groups.add(responsibilityThree);
String uuid = UUID.randomUUID().toString();
String uuid2 = UUID.randomUUID().toString();
employee firstEmployee;
firstEmployee = new employee(uuid, "Mike", groups);
employee secondEmployee = new employee(uuid2, "Marc", groups);
session.save(responsibilityOne);
session.save(responsibilityTwo);
session.save(responsibilityThree);
session.save(firstEmployee);
session.save(secondEmployee);
transaction.commit();
} catch (HibernateException e) {
transaction.rollback();
e.printStackTrace();
} finally {
}
}
}
C'est l'erreur que j'obtiens:
com.mysql.jdbc.des exceptions.jdbc4.MySQLSyntaxErrorException: Table '**.responsabilités' n'existe pas
source d'informationauteur Nick Div
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème, cela a fonctionné pour moi -
J'ai eu le même problème, je l'ai résolu en changeant:
org.hibernate.dialect.MySQLMyISAMDialect
à
org.hibernate.dialect.MySQLDialect
J'ai trouvé la solution dans cette question.
Le scénario suivant pourrait être une autre raison pour laquelle Hibernate ne peut pas auto-créer votre table:
La table
Employee
ne sera pas auto-créé par Hibernate depuisempID
est unString
et il a le@GeneratedValue
annotation.empID
devrait être unint
oulong
.J'ai eu ce problème quelque temps, et j'ai changé mon
id
terrain qui ont la@GeneratedValue
annotation de typeint
et mise en veille prolongée automatique la création de la table.Pourquoi n'essayez-vous pas de créer ou créez-goutte à la place. Semble servir vos fins.
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-optional
J'ai eu le même problème, mais pour moi la solution a été:
au lieu de
Hibernate peut créer une table, hibernate séquence et les tableaux utilisés pour plusieurs-à-plusieurs de cartographie sur votre compte, mais vous devez configurer explicitement en appelant setProperty("hibernate.hbm2ddl.auto", "créer") de l'objet de Configuration. Par Défaut, il suffit de les valider le schéma avec les DB et échouer si quelque chose n'existe pas déjà en donnant erreur "ORA-00942: la table ou la vue n'existe pas".
$mysql --version $mysql Ver 14.14 Distrib 5.5.11
Puis changer le Dialecte en conséquence
MySQL55Dialect/org.hibernate.dialect.MySQL55Dialect
////////////////////////////////////////////////--où vous pouvez trouver de Dialecte:
Espérons que cette Aide