[英]Spring data JPA repositories not saving to database
我試圖在不使用@EnableJpaRepositories
批注和spring自動@EnableJpaRepositories
情況下初始化spring-data存儲庫。 在我現有的應用程序中,我可以訪問要用於數據庫通信的DataSource
對象。 以下代碼生成TravelAlertRepository
的實現,並讀取數據庫中的現有行。 但是,每當我嘗試更新時,這些更改都不會顯示在數據庫中。 我也無法在數據庫中創建新行。
interface TravelAlertRepository extends
org.springframework.data.repository.CrudRepository<TravelAlertVO, Long>{}
class SpringDataRepositories {
private TravelAlertRepository travelAlertRepository;
private javax.persistence.EntityManager entityManager;
SpringDataRepositories() {
this.entityManager = createEntityManager();
RepositoryFactorySupport factory = new JpaRepositoryFactory(entityManager);
travelAlertRepository = factory.getRepository(TravelAlertRepository.class);
}
private static javax.persistence.EntityManager createEntityManager() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPersistenceProviderClass(HibernatePersistenceProvider.class);
em.setJpaProperties(hibProperties());
em.setPersistenceUnitName("persistentName");
em.setPackagesToScan(
TravelAlertVO.class.getPackage().getName()
);
em.afterPropertiesSet();
return em.getObject().createEntityManager();
}
private static Properties hibProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect");
properties.put("hibernate.show_sql", true);
return properties;
}
public static DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("mydb");
dataSource.setPassword("mydb");
return dataSource;
}
}
任何幫助表示贊賞。
使用存儲庫時,它可以在某些休眠緩存狀態下工作,因此使用save()實際上不會將對象保存到數據庫中。 它將其在休眠狀態下標記為需要保存的對象。
如果您調用實體管理器的flush()方法,它將把對象發送到數據庫,但仍然不會提交! 因此,只有在使用相同的數據庫連接時,您才能在數據庫中找到它。
為了在數據庫中查看結果,您需要提交事務。 (默認情況下,Hibernate會一直等到最后,然后再將數據發送到數據庫)。 嘗試為您的實體管理器調用事務的commit()方法em.getTransaction().commit();
檢查本文http://www.baeldung.com/hibernate-save-persist-update-merge-saveorupdate
並閱讀該部分:
從一開始就必須了解所有方法(持久,保存,更新,合並,saveOrUpdate)不會立即導致相應的SQL UPDATE或INSERT語句,這一點很重要。 將數據實際保存到數據庫是在落實事務或刷新會話時發生的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.