Spring @Transactional в H2 для оператора вставки - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу вставить данные в мою таблицу, но вставить только те, которые не существуют в моей БД.Я использую Spring 5, jdbcTemplate и в памяти H2.

Мне нужно что-то подобное ниже, но H2 не имеет PL.Как я могу написать правильный метод Java с аннотацией @Transactional для достижения атомарной операции.Что-то очень похожее на 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");
    }
...