HibernateException: l'accès à DialectResolutionInfo ne peut pas être null lorsque 'hibernate.dialect' n'est pas défini
La création d'une veille prolongée Projet de Test à l'aide de maven.
quand je lance le projet, il génère une Exception:
org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator initiateService
WARN: HHH000181: No appropriate connection provider encountered, assuming application will be supplying connections
org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:104)
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:71)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:209)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:89)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:206)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:178)
at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1885)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843)
at org.hibernate.hibernatetest.App.main(App.java:33)
Exception in thread "main" java.lang.NullPointerException
at org.hibernate.hibernatetest.App.main(App.java:51)
Mais dans la classe principale propriétés requises sont définies.je ne sais pas pourquoi le programme est genrAating exception.
Classe Principale:
public class App {
public static void main(String[] args) {
Configuration configuration;
ServiceRegistry serviceRegistry;
SessionFactory sessionFactory;
Session session = null;
try {
configuration = new Configuration();
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
configuration.setProperty("hibernate.dialect ", "com.applerao.hibernatesqlite.dialect.SQLiteDialect");
configuration.setProperty("hibernate.connection.url ", "jdbc:sqlite:TailorDB.db");
configuration.setProperty("hibernate.connection.driver_class ", "org.sqlite.JDBC");
configuration.setProperty("hibernate.connection.username ", "");
configuration.setProperty("hibernate.connection.password ", "");
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
session = sessionFactory.openSession();
CustomerModel c = new CustomerModel();
c.setID(5);
c.setNIC_Number("691201631345");
c.setFirstName("Zee");
c.setNumber("55225522");
c.setLastName("Jan");
c.setCustomerCode("Zee-123");
session.beginTransaction();
session.save(c);
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
} finally {
session.close();
}
}
}
Dans le POM du fichier:
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.0.Final</version>
</dependency>
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.7.2</version>
</dependency>
<dependency>
<groupId>com.applerao</groupId>
<artifactId>hibernatesqlite</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
Une idée d'où le problème peut être??
CustomerModel classe:
@Entity
@Table(name = "Customer")
public class CustomerModel {
@Id
@GeneratedValue
@Column(name = "c_id")
int ID;
@Column(name = "c_code")
String customerCode;
@Column(name = "c_fname")
String firstName;
@Column(name = "c_mname")
String middleName;
@Column(name = "c_lname")
String lastName;
@Column(name = "c_nic")
String NIC_Number;
@Column(name = "c_email")
String email;
@Column(name = "c_pnumber")
String number;
}
source d'informationauteur Sameer Azeem
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas initialiser la configuration, serviceRegistry, et sessionFactory correctement.
De Mise En Veille Prolongée 4.3.2.Final, StandardServiceRegistryBuilder est introduit. Veuillez suivre cet ordre d'initialisation, par exemple
Donc, dans votre code, vous avez raté l'étape:
configuration.configure()
.Ce qui semble être une vieille question, mais maintenant, quand je suis en utilisant 4.3.1 final Hibernate version que j'ai aussi rencontré ce problème. Après avoir lu beaucoup de réponses, il semblait qu'ils ont vraiment pas pris soin de lui dans la documentation, mais je suis allé à travers la documentation et je pense qu'ils ont les informations nécessaires. Il n'est pas nécessaire que hibernate configuration doit être dans une .fichier de propriétés, mais il peut être dans le fichier xml.
Assurez-vous simplement d'invoquer
configure()
avant d'invoquerbuild()
sur l'instance deStandardServiceRegistryBuilder
. C'est parce que la fonction configure() se charge de la configuration par défaut cfg.xml fichier et construire fait l'utilise.Pour comprendre cela, vous pouvez faire qu'une chose....avant d'invoquer
configure()
.... invoquergetSettings()
sur l'intance deStandardServiceRegistryBuilder
et l'imprimer...c'est une Carte.Vous ne verrez pas de hibernate propriétés que vous avez mentionné dans la cfg.xml
D'invoquer
configure()
et imprimergetSettings()
carte....vous verrez...vous avez tous vos propriétés.En veille prolongée 4.3, il semble que la nécessité d'utiliser hibernate.propriétés à faire de config,
utilisation hibernate.cfg.xml seulement pour inclure les .hbm.xml fichiers,
alors, voici la solution:
dans le classpath, ajouter un fichier: mise en veille prolongée.propriétés
et de faire toutes les config ici,
e.g:
puis, dans hibernate.cfg.xml, ne comprennent que la .hbm.xml fichiers,
e.g:
astuce: le document officiel ne donne aucune astuce de ce genre, je pense que c'est une très mauvaise chose.
Définir les propriétés de configuration avant d'appliquer les propriétés de configuration pour les paramètres de
StandardServiceRegistryBuilder
Aussi, il semble y avoir un espace à la fin de la propriété touches pendant que vous les configurez. Veuillez les supprimer.
Basé sur la lienessayez de changer ce
à
Merci pour la solution. D'une certaine façon le 4.3.5 ne prend pas la connexion (Dialecte) l'information de la hibernate.cfg.xml, l'utilisation d'hibernate.fichier de propriétés.
Voici ce que j'ai fait pour faire toutes les configurations dans le code sans
hibernate.cfg.xml
ouhibernate.properties
. Testé avec hibernate version 4.3.8.Final. Espérons qu'il serait utile.Comme il dit à propos de ServiceRegistry :
L'objet de configuration a été la lecture de toutes les propriétés de la
hibernate.cfg.xml
fichier. Mais leStandardServiceRegistryBuilder
objet n'a pas été à l'aide de ces propriétés.Cette solution a fonctionné pour moi. La déclaration ci-dessous est essentielle pour faire ce travail:
Solution complète:
Cela peut également se produire si le dialecte ne peut pas se connecter pour toute autre raison, telle que le mot de passe a expiré.
Vérifier avant d'exceptions qui peuvent révéler la cause.