Lorsque j'ai mis à jour la version Hibernate de 3.6.8 à 4.0.0, j'ai reçu un avertissement concernant la méthode obsolète buildSessionFactory()
dans cette ligne:
private static final SessionFactory sessionFactory =
new Configuration().configure().buildSessionFactory();
Javadoc recommande d'utiliser une autre méthode
buildSessionFactory(ServiceRegistry serviceRegistry)
mais dans la documentation, j'ai trouvé une variante obsolète :(
Pouvez-vous m'aider avec ce petit malentendu?
java
hibernate
configuration
deprecated
bootstrapping
pushistic
la source
la source
Réponses:
Oui, il est obsolète. Remplacez votre SessionFactory par ce qui suit:
Dans Hibernate 4.0, 4.1, 4.2
Dans Hibernate 4.3, ServiceRegistryBuilder est obsolète . Utilisez plutôt ce qui suit.
la source
Oui, c'est obsolète. http://docs.jboss.org/hibernate/core/4.0/javadocs/org/hibernate/cfg/Configuration.html#buildSessionFactory () vous dit spécifiquement d'utiliser l'autre méthode que vous avez trouvée à la place (
buildSessionFactory(ServiceRegistry serviceRegistry)
) - alors utilisez-la.La documentation est copiée de version en version, et n'a probablement pas encore été mise à jour (ils ne réécrivent pas le manuel avec chaque version) - alors faites confiance aux Javadocs.
Les détails de ce changement peuvent être consultés sur:
Quelques références supplémentaires:
la source
ou
la source
Code vérifié pour fonctionner dans Hibernate 4.3.0. Notez que vous pouvez supprimer le paramètre de nom de fichier XML, ou bien y indiquer votre propre chemin. Ceci est similaire (mais les fautes de frappe ont été corrigées) à d'autres articles ici, mais celui-ci est correct.
la source
C'est aussi simple que cela: les documents JBoss ne sont pas parfaitement bien entretenus à 100%. Allez avec ce que le JavaDoc dit :
buildSessionFactory(ServiceRegistry serviceRegistry)
.la source
Une meilleure façon de créer un objet SessionFactory dans la dernière version hibernate 4.3.0 est la suivante:
la source
Il n'est pas rare de trouver des écarts entre les différentes versions de la documentation. La plupart des développeurs considèrent la documentation comme une corvée et ont tendance à la reporter.
En règle générale, si le javadoc dit une chose et que certains documents non javadoc le contredisent, il est probable que le javadoc soit plus précis. Les programmeurs sont plus susceptibles de maintenir le javadoc à jour avec les modifications apportées au code ... car la "source" du javadoc se trouve dans le même fichier que le code.
Dans le cas des
@deprecated
balises, il est pratiquement certain que le javadoc est plus précis. Les développeurs déconseillent les choses après un examen attentif ... et (de manière générale) ils ne les déprécient pas.la source
System.getenv(String)
bugs.sun.com/bugdatabase/view_bug.do?bug_id=4199068Configuration.buildSessionFactory()
;)Si vous utilisez Hibernate 5.2 et supérieur, vous pouvez utiliser ceci:
la source
TL; DR
Oui, ça l'est. Il existe de meilleures façons d'amorcer Hibernate, comme les suivantes.
Bootstrap natif en veille prolongée
L'
Configuration
objet hérité est moins puissant que l'utilisation duBootstrapServiceRegistryBuilder
, introduit depuis Hibernate 4:Bootstrap JPA
Vous pouvez également démarrer Hibernate à l'aide de JPA:
De cette façon, vous construisez le
EntityManagerFactory
au lieu d'unSessionFactory
. Cependant, leSessionFactory
étendEntityManagerFactory, so the actual object that's built is a
également SessionFactoryImpl`.Conclusion
Ces deux méthodes d'amorçage affectent le comportement Hibernate. Lors de l'utilisation du bootstrap natif, Hibernate se comporte en mode hérité, antérieur à JPA.
Lors du démarrage à l'aide de JPA, Hibernate se comportera conformément à la spécification JPA.
Il existe plusieurs différences entre ces deux modes:
EntityNotFoundException
, exigeant donc un contrôle de la base de données.la source
la source
StandardServiceRegistryBuilder
n'est PAS obsolète.public void sampleConnection () lève une exception {
la source
J'ai édité la méthode créée par batbaatar ci-dessus pour qu'elle accepte l'objet Configuration en tant que paramètre:
Dans la classe principale, j'ai fait:
la source
Dans Hibernate 4.2.2
la source
la source
voici de nombreuses API déconseillées dans le framework core hibernate.
nous avons créé la fabrique de sessions comme ci-dessous:
SessionFactory sessionFactory = new Configuration (). Configure (). BuildSessionFactory ();
La méthode buildSessionFactory est obsolète de la version hibernate 4 et elle est remplacée par la nouvelle API. Si vous utilisez hibernate 4.3.0 et supérieur, votre code doit être:
Configuration configuration = nouvelle Configuration (). Configure ();
Générateur StandardServiceRegistryBuilder = nouveau StandardServiceRegistryBuilder (). ApplySettings (configuration.getProperties ());
SessionFactory factory = configuration.buildSessionFactory (builder.build ());
La classe ServiceRegistryBuilder est remplacée par StandardServiceRegistryBuilder à partir de 4.3.0. Il semble qu'il y aura beaucoup de changements dans la version 5.0. Il n'y a toujours pas beaucoup de clarté sur les API obsolètes et les alternatives appropriées à utiliser. Chaque version incrémentielle propose une API plus obsolète, ils sont en train de peaufiner le cadre principal de la version 5.0.
la source
Dans
hibernate 5.3.1
, vous pouvez essayer ceci:la source
Si quelqu'un ici après la mise à jour vers la 5.1 fonctionne ainsi
au lieu de ci-dessous en veille prolongée 4.3
la source
Importez simplement le package suivant,
la source