Я работал над некоторыми базовыми веб-приложениями Spring, и у меня возникли проблемы с правильным управлением моей базой данных. С тех пор я использую базовые репозитории JPA, и классические save() и findById(long id) выполняют свою работу за меня. Однако недавно я заметил, что когда я получаю объект из базы данных и изменяю его, он не сохраняется. Это привело меня к поиску в Google обо всем, что указано в заголовке вопроса. То, что я нашел, действительно смутило меня, поэтому, возможно, кто-то может прояснить это для меня:
Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
это дало мне entityManager для работы, но у меня были ошибки, и люди говорили об этом: With regards to the original question about obtaining an EntityManagerFactory in a non-spring setting. You simply call Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);, что бы это была за настройка без весны?Все это, кажется, вещи, которые я уже знаю, как делать. Меня интересует entityManager, а также манипулирование и сохранение объектов в базе данных. или по вашей ссылке есть еще одна глава, которую я просто не могу найти?
Если вам действительно нужно получить EntityManager внутри приложения Spring, просто внедрите его с помощью @PersistenceContext EntityManager entityManager. docs.spring.io/spring/docs/current/spring-framework-reference/…




Существует четыре способа использования Spring DAO:
JDBC, Hibernate, JPA — это независимые технологии. Если вы научитесь hibernate, вы научитесь использовать SessionFactory. То же самое для jpa и EntityManager. Весенние данные — еще одна абстракция от Spring для доступа к базе данных.
Для получения дополнительной информации о поддержке весеннего DAO, пожалуйста, ознакомьтесь с документацией здесь.
Я работаю с репозиториями JPA, а Hibernate выполняет сопоставление с базой данных, так какую технологию я использую?
Если вы используете интерфейсы репозиториев JPA, вы используете Spring Data. Тогда вам не нужно напрямую использовать EntityManager или SessionFactory.
Тогда как мне решить эту проблему? personRepository.save(someguy) personRepository.findById("1").setName("BlaBla") Другое имя не сохраняется. Я знаю, что могу сделать Person temp=personRepository.findById("1"); temp.setName("BlaBla") personRepository.save(temp); Но не плохо ли экономить дважды? Кроме того, я не буду вдаваться в другие проблемы, не зная, как манипулировать сущностями?
Вы вызвали метод CrudRepository.save(person) для его сохранения? Это способ сохранить сущность, если вы используете данные Spring.
Да, но тогда, если в методе я хочу изменить его имя, после того, как я его получу и изменю, должен ли я снова сохранить? это не плохо? Знает ли он, что это та же самая сущность, которую я взял, чтобы я мог изменить ее?
Данные Spring будут знать, что ваша сущность является управляемой. Метод сохранения сохраняет или объединяет данный объект с помощью JPA EntityManager.
Пожалуйста, прочитайте документацию по весенним данным для получения дополнительной информации.
Пожалуйста. Если было полезно, отметьте как ответ. Спасибо
Я хочу оставить это еще на час или два, после этого я дам вам ответ :) еще раз спасибо!!