최대 절전 모드 4에서 buildSessionFactory ()가 더 이상 사용되지 않습니까?
Hibernate 버전을 3.6.8.final에서 4.0.0.final로 업데이트했을 때 buildSessionFactory()
다음 줄에서 더 이상 사용되지 않는 메소드 에 대한 경고가 표시 됩니다.
private static final SessionFactory sessionFactory =
new Configuration().configure().buildSessionFactory();
javadoc은 다른 방법을 사용할 것을 권장합니다
buildSessionFactory(ServiceRegistry serviceRegistry)
그러나 설명서 에서 더 이상 사용되지 않는 변형을 발견했습니다.
이 작은 오해를 도와 주실 수 있습니까?
예, 더 이상 사용되지 않습니다. SessionFactory를 다음으로 바꾸십시오.
에서 최대 절전 모드 4.0, 4.1, 4.2
private static SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;
public static SessionFactory createSessionFactory() {
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(
configuration.getProperties()). buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
return sessionFactory;
}
최신 정보:
Hibernate 4.3 에서는 ServiceRegistryBuilder가 더 이상 사용되지 않습니다 . 대신 다음을 사용하십시오.
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
예, 더 이상 사용되지 않습니다. http://docs.jboss.org/hibernate/core/4.0/javadocs/org/hibernate/cfg/Configuration.html#buildSessionFactory ()는 구체적으로 찾은 다른 방법 ()을 사용하도록 지시 buildSessionFactory(ServiceRegistry serviceRegistry)
하므로 사용하십시오.
문서는 릴리스마다 복사되며 아직 업데이트되지 않았을 수 있습니다 (매번 릴리스마다 매뉴얼을 다시 작성하지는 않음). 따라서 Javadoc을 신뢰하십시오.
이 변경 사항에 대한 자세한 내용은 다음을 참조하십시오.
- 소스 코드 : https://github.com/hibernate/hibernate-core/commit/0b10334e403cf2b11ee60725cc5619eaafecc00b
- 티켓 : https://hibernate.onjira.com/browse/HHH-5991
몇 가지 추가 참조 :
- http://relation.to/Bloggers/HibernateCore40IsFinal
- http://relation.to/19942.lace
- http://docs.jboss.org/hibernate/core/4.0/devguide/en-US/html/ch07.html#services-registry
- http://sourceforge.net/apps/mediawiki/hibernate/index.php?title= 카테고리 : 서비스
또는
public class Hbutil {
private static SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;
private static SessionFactory configureSessionFactory() throws HibernateException {
Configuration configuration = new Configuration();
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
return sessionFactory;
}
public static SessionFactory getSessionFactory() {
return configureSessionFactory();
}
}
Hibernate 4.3.0에서 작동하도록 코드가 확인되었습니다. XML 파일 이름 매개 변수를 제거하거나 고유 한 경로를 제공 할 수 있습니다. 이것은 다른 게시물과 유사하지만 오타가 수정되었지만 정확합니다.
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
Configuration configuration = new Configuration();
configuration.configure("/com/rtw/test/hiber/hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
JBoss 문서는 100 % 완벽하게 유지 관리되지 않습니다. JavaDoc의 내용 과 함께 진행 하십시오 buildSessionFactory(ServiceRegistry serviceRegistry)
.
다른 버전의 문서간에 불일치가 발견되는 것은 드문 일이 아닙니다. 대부분의 개발자는 문서를 집안일로 여기고 문서화를하는 경향이 있습니다.
일반적으로 javadoc이 한 가지를 말하고 일부 비 javadoc 문서가이를 상충하는 경우 javadoc이 더 정확할 가능성이 있습니다. 프로그래머는 javadoc의 "소스"가 코드와 동일한 파일에 있기 때문에 코드를 변경하여 javadoc을 최신 상태로 유지할 가능성이 높습니다.
@deprecated
태그 의 경우 javadoc이 더 정확하다는 것은 확실합니다. 개발자는 신중하게 고려한 후 사용을 중단하고 ... (일반적으로 말하면) 사용하지 않습니다.
최신 최대 절전 모드 릴리스 4.3.0 이상 에서 SessionFactory 객체 를 생성하는 더 좋은 방법 은 다음과 같습니다.
Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().
applySettings(configuration.getProperties());
SessionFactory factory = configuration.buildSessionFactory(builder.build());
Hibernate 5.2 이상을 사용하는 경우 다음을 사용할 수 있습니다.
private static StandardServiceRegistry registry;
private static SessionFactory sessionFactory;
public static SessionFactory getSessionFactory() {
if (sessionFactory == null) {
try {
// Creating a registry
registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
// Create the MetadataSources
MetadataSources sources = new MetadataSources(registry);
// Create the Metadata
Metadata metadata = sources.getMetadataBuilder().build();
// Create SessionFactory
sessionFactory = metadata.getSessionFactoryBuilder().build();
} catch (Exception e) {
e.printStackTrace();
if (registry != null) {
StandardServiceRegistryBuilder.destroy(registry);
}
}
}
return sessionFactory;
}
//To shut down
public static void shutdown() {
if (registry != null) {
StandardServiceRegistryBuilder.destroy(registry);
}
}
public class HibernateSessionFactory {
private static final SessionFactory sessionFactory = buildSessionFactory1();
private static SessionFactory buildSessionFactory1() {
Configuration configuration = new Configuration().configure(); // configuration
// settings
// from
// hibernate.cfg.xml
StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();
serviceRegistryBuilder.applySettings(configuration.getProperties());
ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();
return configuration.buildSessionFactory(serviceRegistry);
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdown() {
// Close caches and connection pools
getSessionFactory().close();
}
public void sampleConnection ()에서 예외 {
Configuration cfg = new Configuration().addResource("hibernate.cfg.xml").configure();
StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
SessionFactory sessionFactory = configuration.buildSessionFactory(ssrb.build());
Session session = sessionFactory.openSession();
logger.debug(" connection with the database created successfuly.");
}
I edited the method created by batbaatar above so it accepts the Configuration object as a parameter:
public static SessionFactory createSessionFactory(Configuration configuration) {
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
factory = configuration.buildSessionFactory(serviceRegistry);
return factory;
}
In the main class I did:
private static SessionFactory factory;
private static Configuration configuration
...
configuration = new Configuration();
configuration.configure().addAnnotatedClass(Employee.class);
// Other configurations, then
factory = createSessionFactory(configuration);
In Hibernate 4.2.2
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
public class Test {
public static void main(String[] args) throws Exception
{
Configuration configuration = new Configuration()
.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(
configuration.getProperties()).buildServiceRegistry();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Users users = new Users();
... ...
session.save(users);
transaction.commit();
session.close();
sessionFactory.close();
}
}
Tested on 4.2.7 release
package com.national.software.hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import com.national.software.dto.UserDetails;
public class HibernateTest {
static SessionFactory sessionFactory;
public static void main(String[] args) {
// TODO Auto-generated method stub
UserDetails user = new UserDetails();
user.setUserId(1);
user.setUserName("user1");
Configuration config = new Configuration();
config.configure();
ServiceRegistry serviceRegistry = (ServiceRegistry) new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
sessionFactory = config.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
}
}
here are many APIs deprecated in the hibernate core framework.
we have created the session factory as below:
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
The method buildSessionFactory is deprecated from the hibernate 4 release and it is replaced with the new API. If you are using the hibernate 4.3.0 and above, your code has to be:
Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
SessionFactory factory = configuration.buildSessionFactory(builder.build());
Class ServiceRegistryBuilder is replaced by StandardServiceRegistryBuilder from 4.3.0. It looks like there will be lot of changes in the 5.0 release. Still there is not much clarity on the deprecated APIs and the suitable alternatives to use. Every incremental release comes up with more deprecated API, they are in way of fine tuning the core framework for the release 5.0.
In hibernate 5.3.1
, you can try this:
ServiceRegistry standardRegistry =
new StandardServiceRegistryBuilder().configure().build();
Metadata sources = new MetadataSources(standardRegistry).addAnnotatedClass(MyEntity.class).getMetadataBuilder().build();
SessionFactory sf = sources.buildSessionFactory();
If anyone here after updating to 5.1 this is how it works
StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
MetadataSources sources = new MetadataSources(registry);
Metadata metadata = sources.getMetadataBuilder().build();
sessionFactory = metadata.getSessionFactoryBuilder().build();
instead of the below in hibernate 4.3
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(
configuration.getProperties()). buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Just import following package,
import org.hibernate.cfg.Configuration;
참고URL : https://stackoverflow.com/questions/8621906/is-buildsessionfactory-deprecated-in-hibernate-4
'Programing' 카테고리의 다른 글
JavaScript에서 parseInt (string)과 Number (string)의 차이점은 무엇입니까? (0) | 2020.04.28 |
---|---|
현재 디렉토리에 상대적인 경로를 사용하여 Linux CLI에서 재귀 적으로 파일 나열 (0) | 2020.04.28 |
로컬 사본을 삭제하지 않고 SVN 저장소에서 파일 제거 (0) | 2020.04.28 |
Git Shelve vs Stash (0) | 2020.04.28 |
Visual Studio에서 게터 및 세터를 생성하는 방법은 무엇입니까? (0) | 2020.04.28 |