我想在表中插入数据,但是只插入数据库中不存在的数据。我正在使用Spring 5,jdbcTemplate和内存H2。
我需要以下类似内容,但H2没有PL。
如何编写带有@Transactional
批注的正确Java方法以实现原子操作。与putIfAbsent()
中的ConcurrentHashMap
类似。
如果H2有PL,我需要什么:
@Transactional
public void create(String city, Double temperature) {
String query = "BEGIN\n" +
" IF NOT EXISTS (SELECT * FROM weather \n" +
" WHERE city = :city)\n" +
" BEGIN\n" +
" INSERT INTO weather (city, temperature, time_stamp)\n" +
" VALUES (:city, :temperature, :time_stamp)\n" +
" END\n" +
"END";
MapSqlParameterSource paramMap = new MapSqlParameterSource();
paramMap.addValue("city", city);
paramMap.addValue("temperature", temperature);
paramMap.addValue("time_stamp", new Date());
jdbcTemplate.update(query, paramMap);
System.out.println("Inserted into Weather Table Successfully");
}