Я настроил свойства hibernate в файле application.properties
моего приложения загрузки весны.application.properties vs hibernate.cfg.xml в приложении весенней загрузки
application.properties
#hibernate config
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
spring.datasource.url=<db_url>
spring.datasource.username=<username>
spring.datasource.password=<password>
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
# Show or not log for each sql query
spring.jpa.show-sql = true
# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# ThymeLeaf
spring.thymeleaf.cache= false
spring.thymeleaf.mode=LEGACYHTML5
я получаю ошибку, когда я пытаюсь получить сессию
Configuration configuration = new Configuration();
configuration.configure("application.properties");
StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
SessionFactory sessionFactory = configuration.buildSessionFactory(ssrb.build());
Session session = sessionFactory.openSession();
ОШИБКА:
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.hibernate.HibernateException:
Could not parse configuration: application.properties] with root cause
org.dom4j.DocumentException: Error on line 1 of document : Content is not allowed in prolog. Nested exception: Content is not allowed in prolog.
Я думаю, что его ждет hibernate.cfg.xml
файл в пути класса?
Есть ли способ использовать только application.properties
или мне нужно переместить все свойства, связанные с спящим режимом, на hibernate.cfg.xml
или hibernate.properties
файл?
getSelectedStudents
public List getSelectedStudents(){
final EntityManagerFactory emf = null;
EntityManager em = emf.createEntityManager();
Query q = em.createNativeQuery("SELECT s.student_id, s.first_name, s.last_name, s.city FROM Student s "
+ "where s.city=:city and s.last_name = :lname", Student.class);
q.setParameter("city", "London");
q.setParameter("lname", "Rizwan");
List<Student> students = q.getResultList();
for (Student s : students) {
System.out.println("Student "
+ s.getFirstName()
+ " "
+ s.getLastName());
}
return students;
}
Ошибка 2:
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException: null
at com.school.service.StudentServiceImplementation.getSelectedStudents(StudentServiceImplementation.java:69) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_77]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_77]
EDIT: как предложено использовать Entity менеджер, я добавил метод getSelectedStudents. Я все еще получаю ошибку на EntityManager em = emf.createEntityManager();
см. Ошибка 2 для деталей.
Прочитав документацию и не пытайтесь использовать спящий режим для получения сеанса. Также, если вы используете Spring Boot, зачем использовать 'SessionFactory' ... Вместо этого используйте' EntityManger'. Spring Boot предварительно сконфигурировал материал JPA для вас, если только вам не нужны некоторые функции спящего режима, начиная с JPA. –
@M.Deinum, я использую 'EntityManager', но получаю ошибку (ошибка 2), пожалуйста, см. Обновление. – Muhammad
Нет, вы не ... Вы используете 'null'. Я настоятельно рекомендую прочитать документацию о структуре, которую вы пытаетесь использовать ... В основном единственное, что вам нужно сделать, это объявить поле типа 'EntityManager' в вашем классе, поместить там' @ PersistenceContext' и сделанный. –