Вы делаете свой Дао слишком сложным.Во-первых, зачем использовать нативный спящий режим, когда достаточно простого EntityManager
Зачем использовать EntityManagerFactory
для управления своим EntityManager
.Наконец, вы находитесь в среде, управляемой Spring, не используйте openSession
или createEntityManager
, так как это даст вам нетранзакционную среду.
При этом вы можете удалить большую часть своего кода.
@Transactional
@Component("itemsDao")
public class ItemsDao {
@PersistenceContext
private EntityManager em;
// CREATE OR UPDATE ITEM
@PreAuthorize("hasRole('ADMIN')")
public void update(Items items) {
em.merge(items);
}
}
Это все, что вам нужно.В основном не используйте openSession
, поскольку это даст вам новый Session
для спящего режима.Если вы сделаете это достаточно, в конечном итоге вы также получите не отвечающее приложение, так как используются все соединения с БД.Это потому, что вы открываете сессию, но никогда не закрываете ее.
Я хотел бы предложить, однако, поскольку вы используете Spring Boot и JPA, чтобы просто использовать Spring Data JPA и позволить этому обрабатывать все это.
public interface ItemsRepository extends CrudRepository<Items, Long> {}
Затем в своем коде просто вызовите метод save
для ItemsRepository
, и Spring Data JPA сделает все за вас.