Jeg har løst det samme problem med Hibernate 5. Der er et problem i denne kode
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
SessionFactory sf = configuration.buildSessionFactory(sr);
Denne kode fungerer fint til Hibernate 4.3.5, men den samme kode har det samme problem for Hibernate 5.
Når du gør configuration.buildSessionFactory(sr)
, ved hjælp af Hibernate 5, Configuration
mister al information om kortlægning, der hentes ved at kalde configuration.configure()
.
Løsning
For at løse problemet, hvis du bruger standardkonfigurationsfiler hibernate.cfg.xml
og hibernate.properties
, kan du oprette sessionsfabrikken på denne måde (uden ServiceRegistry
)
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Indlæser egenskaber
Hvis du har andre egenskaber i en fil, så hibernate.properties
, kan du bygge sessionsfabrikken ved hjælp af StandardServiceRegistryBuilder
(ihvertfald, hvis du har hibernate.properties
og anden fil, den indlæses begge)
At indlæse egenskaber som en ressource
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties("hibernate-h2.properties").build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Du skal have hibernate-h2.properties
i klassestien (roden af mappen kilder, mappen ressourcer). Du kan også angive en sti fra rodkildemappen/com/github/xxx/model/hibernate-h2.properties
.
For at indlæse egenskaber fra en sti i filsystemet
File propertiesPath = new File("some_path");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties(propertiesPath).build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Du kan finde et eksempel på en konsolapplikation, der bruger denne tilgang her fluent-hibernate-mysql . Den bruger en hjælpeklasse til at bygge sessionsfabrikken fra fluent-hibernate-biblioteket .
Forkert Hibernate 5-selvstudie
Der er et forkert eksempel i Hibernate 5 tutorial 1.1.6. Opstart og hjælpere . Den bruger denne kode
return new Configuration().configure().buildSessionFactory(
new StandardServiceRegistryBuilder().build() );
Den udfører ikke en korrekt konfiguration.