bit*_*ier 8 java insert spring-data-jdbc
我正在玩spring-data-jdbc并发现了一个问题,我用谷歌无法解决.
无论我尝试做什么,我都无法将一个简单的对象推入数据库(Bean1.java:25):
carRepository.save(new Car(2L, "BMW", "5"));
两个,没有一个和一个TransactionManager + @Transactional数据库(显然)不提交记录.
该代码基于Postgres数据库,但您也可以简单地使用下面的H2并获得相同的结果.
这是(简约)源代码:https: //github.com/bitmagier/spring-data-jdbc-sandbox/tree/stackoverflow-question
有人能告诉我,为什么汽车没有插入数据库?
Jen*_*der 16
这与无效的交易无关.相反,它是关于Spring Data JDBC,考虑您的实例需要更新(而不是插入)的现有实例.
您可以验证这是问题启动日志记录的org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.你应该看到一个update但没有insert.
默认情况下,Spring Data JDBC将实体视为新的,因为它具有对象类型的id和null基本类型(例如int或long)的值和值的值0.
您有以下选项,以使其工作:
将id设置为null并配置数据库模式,以便它自动在insert上创建新值.保存后,您的实体实例将包含数据库中生成的值.
注意:Spring Data JDBC即使在您的实体中是最终的,也会设置id.
保留id null并将其在Before-Save监听器中设置为所需的值.
让您的实体实施Persistable.这允许您控制实体何时被视为新实体.你可能也需要一个监听器,所以你可以让实体知道它不再是新的.
从Spring Data JDBC 1.1版开始,您还可以使用a JdbcAggregateTemplate来执行直接插入,而无需检查id,请参阅https://jira.spring.io/browse/DATAJDBC-282.当然,您可以在存储库的自定义方法中执行此操作,如此示例中所示:https://github.com/spring-projects/spring-data-examples/pull/441
| 归档时间: |
|
| 查看次数: |
1568 次 |
| 最近记录: |