H2中的Spring @Transactional用于插入语句

时间:2019-02-19 11:52:35

标签: java sql spring h2 transactional

我想在表中插入数据,但是只插入数据库中不存在的数据。我正在使用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");
    }

0 个答案:

没有答案