Jag har åtgärdat samma problem med Hibernate 5. Det finns ett problem i den här koden
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
SessionFactory sf = configuration.buildSessionFactory(sr);
Den här koden fungerar bra för Hibernate 4.3.5, men samma kod har samma problem för Hibernate 5.
När du gör configuration.buildSessionFactory(sr)
, med Hibernate 5, Configuration
förlorar all information om mappning som får genom att anropa configuration.configure()
.
Lösning
För att åtgärda problemet, om du använder standardkonfigurationsfiler hibernate.cfg.xml
och hibernate.properties
, kan du skapa sessionsfabriken på detta sätt (utan ServiceRegistry
)
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Laddar egenskaper
Om du har andra egenskaper i en fil än hibernate.properties
, kan du bygga sessionsfabrik med StandardServiceRegistryBuilder
(i alla fall, om du har hibernate.properties
och annan fil, den kommer att laddas båda)
För att ladda egenskaper som en resurs
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties("hibernate-h2.properties").build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Du måste ha hibernate-h2.properties
i klasssökvägen (roten av källmappen, resursmappen). Du kan också ange en sökväg från rotkällmappen/com/github/xxx/model/hibernate-h2.properties
.
För att ladda egenskaper från en sökväg i filsystemet
File propertiesPath = new File("some_path");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties(propertiesPath).build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Du kan hitta ett exempel på en konsolapplikation som använder detta tillvägagångssätt här fluent-hibernate-mysql . Den använder en verktygsklass för att bygga sessionsfabriken från fluent-hibernate-biblioteket .
Felaktig självstudiekurs för Hibernate 5
Det finns ett felaktigt exempel i Hibernate 5 tutorial 1.1.6. Startup och hjälpare . Den använder den här koden
return new Configuration().configure().buildSessionFactory(
new StandardServiceRegistryBuilder().build() );
Den gör inte en korrekt konfiguration.