[英]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.