Tôi đã gặp vấn đề về sự tồn tại của phần tử với cơ sở dữ liệu bằng EntityManager. Dựa trên những câu trả lời tôi tìm thấy, tôi đã thử 4 cách đó trong DaoJpa của tôi để làm điều đó nhưng vẫn thất bại. Ở đây tôi kèm theo bốn cách tôi đã cố gắng:EntityManager không thể sử dụng lâu dài để lưu phần tử vào cơ sở dữ liệu
Mã trong điều khiển phần:
@Transactional
SmartProduct smartProduct = new SmartProduct();
smartProduct.setName("Dove Soap");
smartProductDao.persist(smartProduct);
1. DaoJpa:
@Transactional
public void persist(SmartProduct smartProduct) {
entityManager.persist(smartProduct);
Không hoạt động!
2.
@Transactional
public void persist(SmartProduct smartProduct) {
entityManager.persist(smartProduct);
entityManager.flush();
Exception tôi nhận: không có giao dịch là cơ bản dở dang
3.
@Transactional
public void persist(SmartProduct smartProduct) {
EntityTransaction emTransaction = entityManager.getTransaction();
emTransaction.begin();
entityManager.persist(smartProduct);
emTransaction.commit();
entityManager.close();
Exception tôi nhận: Không được phép tạo giao dịch trên EntityMa được chia sẻ nager - sử dụng mùa xuân giao dịch hoặc EJB CMT thay
4.
@Transactional
public void persist(SmartProduct smartProduct) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistenceUnit");
EntityManager em = emf.createEntityManager();
EntityTransaction etx = em.getTransaction();
etx.begin();
em.persist(smartProduct);
etx.commit();
em.close();
emf.close();
Exception tôi nhận: Các ứng dụng phải cung cấp kết nối JDBC
một người nào đó có thể giúp tôi tìm ra vấn đề xin vui lòng? Rất cám ơn trước!
Rất cám ơn sự trợ giúp của JustinKSU. Tôi thêm chú thích trong bối cảnh mùa xuân và sau đó nó được giải quyết! Đây là phiên bản trước của bối cảnh mùa xuân của tôi:
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" />
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
<property name="persistenceUnitName" value="persistenceUnit" />
<property name="dataSource" ref="dataSource" />
</bean>
Sau khi thêm
<tx:annotation-driven />
nó hoạt động:
<tx:annotation-driven />
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" />
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
<property name="persistenceUnitName" value="persistenceUnit" />
<property name="dataSource" ref="dataSource" />
</bean>
Bạn đã thử sử dụng @Transactional trên phương pháp tồn tại chưa? – JustinKSU
Xin lỗi tôi quên đề cập đến nó trong bài viết. Có, tôi đã thêm @Transactional trước phương thức theo tất cả bốn cách. Ngoài ra tôi đã cố gắng để thêm (readOnly = true)/(readOnly = false) sau khi chú thích giao dịch, và thậm chí thêm (propagation = Propagation.REQUIRED) là tốt, nhưng dường như không có sự khác biệt. –
Bạn có đang sử dụng @PersistenceContext để tiêm thực thểManager không? – JustinKSU