Comment faire pour récupérer sessionFactory de mise en veille prolongée 4.3.4.Final?
Auparavant, j'ai été en utilisant le code suivant pour configurer la sessionFactory, mais après la mise à niveau de la version de mon hibernation 4.2.1.Finale de l'article 4.3.4.Final, je ne peux pas récupérer sessionFactory en utilisant le code suivant en tant que ServiceRegistryBuilder() est obsolète.
J'ai utilisé ce lien de la créer mais la fonction fournie n'est pas le retour de toute chose, donc, il s'agit d'un pré-erreur de compilation.
private static SessionFactory configureSessionFactory() {
try {
Configuration configuration = new Configuration();
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
return sessionFactory;
} catch (HibernateException e) {
System.out.append("** Exception in SessionFactory **");
e.printStackTrace();
}
return sessionFactory;
}
static {
try {
sessionFactory = configureSessionFactory();
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
private HibernateUtil() {
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static Session getSession() throws HibernateException {
Session session = threadLocal.get();
if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession() : null;
threadLocal.set(session);
}
return session;
}
public static void rebuildSessionFactory() {
try {
sessionFactory = configureSessionFactory();
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
if (session.isOpen()) {
session.close();
}
}
}
Quelle est votre méthode
setField
faire? Il semble assez central, après tout...OriginalL'auteur AlexCartio1 | 2014-03-13
Vous devez vous connecter pour publier un commentaire.
En 4.3, vous devez utiliser le
StandardServiceRegistryBuilder
à la place.StandardServiceRegistryBuilder
ont ajouté une nouvelle parent deServiceRegistryBuilder
. Le reste du code doit être le même. Le seul endroit que j'ai trouvé cette documenté "clairement" est en 4.3 JavadocServiceRegistryBuilder
.Une chose que je n'ai pas d'avis a été qu'ils ont changé le
ServiceRegistryBuilder.buildServiceRegistry()
méthode à justeStandardServiceRegistryBuilder.build()
. Donc, il va vous obliger à modifier cette partie de votre processus de construction:Devient:
Messages: org.hibernate.integrator.internal.IntegratorServiceImpl.(Ljava/util/LinkedHashSet;Lorg/hibernate/boot/registry/classloading/spi/ClassLoaderService;)V Fichier: org/hibernate/boot/registry/BootstrapServiceRegistryBuilder.java numéro de Ligne: 215
Assurez-vous que vous avez retiré tous de la version précédente(s) de veille prolongée dans votre classpath. Regarder sur les github, je ne vois pas pourquoi ce serait causée moins, vous avez eu chargeur de classe des problèmes provoqués par des conflits de version, comme la
IntegratorServiceImpl
existe dans les deux versions que vous utilisez, ce qui suggère un class loader problème pour moi.jetez un oeil à ma question, stackoverflow.com/questions/23646389/...
OriginalL'auteur pickypg
J'ai testé celui-ci et il fonctionne sur Hibernate 4.3.6
OriginalL'auteur Koala
Oui, ils ont désapprouvé les précédentes ServiceRegistryBuilder(), voici comment vous pouvez le faire avec Hibernate 4.3.4
Source: Créer une session d'usine prolongée de 4
version 4.3.4.Final @AlexCartio1 les détails de la version qui est déjà mentionné dans le titre de votre question . De toute façon, j'ai ajouté de l' .3.4 pour plus de clarté.
OriginalL'auteur zee