Tôi đã khắc phục sự cố tương tự với Hibernate 5. Có sự cố trong mã này
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
SessionFactory sf = configuration.buildSessionFactory(sr);
Mã này hoạt động tốt cho Hibernate 4.3.5, nhưng cùng một mã có cùng một vấn đề đối với Hibernate 5.
Khi bạn thực hiện configuration.buildSessionFactory(sr)
, sử dụng Hibernate 5, Configuration
lưu trữ tất cả thông tin về ánh xạ nhận được bằng lệnh gọi configuration.configure()
.
Giải pháp
Để khắc phục sự cố, nếu bạn sử dụng tệp cấu hình chuẩn hibernate.cfg.xml
và hibernate.properties
, bạn có thể tạo nhà máy phiên bằng cách này (không có ServiceRegistry
)
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Đang tải thuộc tính
Nếu bạn có thuộc tính trong một tệp khác thì hibernate.properties
, bạn có thể xây dựng nhà máy phiên bằng cách sử dụng StandardServiceRegistryBuilder
(dù sao, nếu bạn có hibernate.properties
và tệp khác, nó sẽ được tải cả hai)
Để tải các thuộc tính dưới dạng tài nguyên
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties("hibernate-h2.properties").build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Bạn cần có hibernate-h2.properties
trong đường dẫn lớp (thư mục gốc của thư mục nguồn, thư mục tài nguyên). Bạn cũng có thể chỉ định một đường dẫn từ thư mục nguồn gốc /com/github/xxx/model/hibernate-h2.properties
.
Để tải các thuộc tính từ một đường dẫn trong hệ thống tệp
File propertiesPath = new File("some_path");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties(propertiesPath).build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Bạn có thể tìm thấy một ứng dụng bảng điều khiển mẫu bằng cách sử dụng phương pháp này tại đây thông thạo-hibernate-mysql . Nó sử dụng một lớp tiện ích để xây dựng nhà máy phiên từ thư viện thông thạo-ngủ đông .
Hướng dẫn Hibernate 5 không chính xác
Có một ví dụ không chính xác trong hướng dẫn Hibernate 5 1.1.6. Khởi động và người trợ giúp . Nó sử dụng mã này
return new Configuration().configure().buildSessionFactory(
new StandardServiceRegistryBuilder().build() );
Nó không có cấu hình thích hợp.