Hibernate 5: - org.hibernate.MappingException: entité inconnue
J'obtiens le message d'erreur org.hibernate.MappingException: Unknown entity
quand je suis en train d'intégrer hibernate 5.0 avec mysql
Cela semble être un problème avec hibernate5.0.0 et 5.0.1 . Cela fonctionne bien avec hibernate 4.3.9
Maven dependices
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0.0.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>
hibernate.cfg.xml
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3307/SampleDB
</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
<mapping class="UserA.User"></mapping>
</session-factory>
HibernateMain.java code
package UserA;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.mapping.Map;
import org.hibernate.metadata.ClassMetadata;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.service.ServiceRegistry;
public class HibernateMain {
public static void main(String[] args) {
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
SessionFactory sf = configuration.buildSessionFactory(sr);
User user1 = new User();
user1.setUserName("Arpit");
user1.setUserMessage("Hello world from arpit");
user1.setUserId(22);
Session ss = sf.openSession();
ss.beginTransaction();
//saving objects to session
ss.save(user1);
ss.getTransaction().commit();
ss.close();
}
}
User.java
package UserA;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity(name="User_table")
public class User {
@Id
int userId;
@Column(name = "User_Name")
String userName;
@Column(name = "User_Message")
String userMessage;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserMessage() {
return userMessage;
}
public void setUserMessage(String userMessage) {
this.userMessage = userMessage;
}
}
source d'informationauteur Mamta Garg
Vous devez vous connecter pour publier un commentaire.
J'ai résolu le même problème avec Hibernate 5. Il y a un problème dans ce code
Ce code fonctionne très bien pour Hibernate 4.3.5, mais le même code a le même problème pour Hibernate 5.
Lorsque vous ne
configuration.buildSessionFactory(sr)
l'utilisation d'Hibernate 5,Configuration
perd toutes les informations sur le mappage qui obtient par appelconfiguration.configure()
.Solution
Pour résoudre le problème, si vous utilisez la configuration standard des fichiers
hibernate.cfg.xml
ethibernate.properties
vous pouvez créer la session de l'usine de cette façon (sansServiceRegistry
)Chargement propriétés
Si vous avez des propriétés dans un fichier, puis d'autres
hibernate.properties
vous pouvez construire une fabrique de session à l'aide deStandardServiceRegistryBuilder
(de toute façon, si vous avezhibernate.properties
et d'autres fichier, il sera chargé à la fois)Pour charger les propriétés d'une ressource
Vous avez besoin d'avoir
hibernate-h2.properties
dans le chemin de classe (de la racine des sources du dossier de, dossier de ressources). Vous pouvez spécifier un chemin d'accès à partir de la racine du dossier source trop/com/github/xxx/model/hibernate-h2.properties
.À la charge de propriétés à partir d'un chemin d'accès dans le système de fichiers
Vous pouvez trouver un exemple d'application de la console à l'aide de cette approche ici fluide-hibernate-mysql. Il utilise une classe utilitaire pour construire la session de l'usine de la fluide-hibernate bibliothèque.
Incorrect Hibernate 5 tutoriel
Il est un mauvais exemple dans Hibernate 5 tutoriel 1.1.6. Démarrage et les accompagnateurs. Il utilise ce code
Il ne veut pas faire une bonne configuration.
Dans Hibernate 5, vous avez besoin pour construire
StandardServiceRegistry
etMetadata
de construireSessionFactory
. Vous pouvez utiliser les éléments suivantsHibernateUtil
de construireSessionFactory
.hibernate.cfg.xml
doit être à la racine du classpath de votre application.Aussi, Si vous êtes en utilisant Hibernate 5 et à l'aide de
@Id
que votre identifiant de la stratégie de génération de puis à l'aide deGenerationType.AUTO
va ramasser la "séquence" de l'identité du générateur par défaut de MySQL, ce qui vous donnera une lacom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'SampleDB.hibernate_sequence' doesn't exist
exception, si vous ne l'avez pas configuré dans votre entités à identifier les attributs. Donc, avec Hibernate 5, l'utilisationGenerationType.IDENTITY
à la place.Vous n'avez pas ajouter un fichier de configuration
Assurez-vous que vous avez créé un fichier de mappage User.hbm.xml ou User.xml fichier et inclus ce fichier dans hibernate.cfg.xml
Je pense que c'est un moyen facile de résoudre ce problème.
En utilisant ceci:
au lieu de cela:
résolu le problème avec Hibernate 5.2.10.Final.
J'ai été confronté à la même question & j'ai cherché pendant près de 2 heures et j'ai essayé de différentes manières, comme le remplacement de vieux hibernate pots&la modification de la db schéma de la table. Mais finalement obtenu la solution ci-dessous;
Remplacer ci-dessus pour
Il sera alors bien fonctionner..