Spring Data-JPA 사용하면서 거의 대부분 메소드명으로 쿼리를 만들어쓰는데


가끔 @Query 를 사용하여 JPQL 을 만들어 쓰는데 아래와 같은 에러가 났다.




@Query(value = "UPDATE Item i\n" +
"SET i.yesterdayRanking = i.todayRanking\n " +
" , i.todayRanking = 0\n " +
"where i.createDate between ?1 and ?2")
void updateRanking(Date startDate, Date endDate);


에러 : org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations



UPDATE 쿼리를 실행할 때는 @Modifying annotation 을 붙여줘야한다. 그리고 @Transactional 도 같이



@Modifying
@Transactional
@Query(value = "UPDATE Item i\n" +
"SET i.yesterdayRanking = i.todayRanking\n " +
" , i.todayRanking = 0\n " +
"where i.createDate between ?1 and ?2")
void updateRanking(Date startDate, Date endDate);



참조 : http://stackoverflow.com/questions/10220262/updating-boolean-value-in-spring-data-jpa-using-query-with-hibernate




YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. 1466411013 2016.06.20 17:23 신고  댓글주소  수정/삭제  댓글쓰기

    좋은소식 잘 읽었습니다.~^^



1. SELECT 쿼리 예제
// 숫자형을 리턴할때
int countOfActorsNamedJoe = this.jdbcTemplate.queryForInt(
"select count(0) from t_actors where first_name = ?", new Object[]{"Joe"});

// 도메인 객체와 매핑할때
public Collection findAllActors() {
return this.jdbcTemplate.query( "select first_name, surname from t_actor", new ActorMapper());
}
private static final class ActorMapper implements RowMapper {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
Actor actor = new Actor();
actor.setFirstName(rs.getString("first_name"));
actor.setSurname(rs.getString("surname"));
return actor;
}
}

2. INSERT, UPDATE, DELETE 쿼리 예제
this.jdbcTemplate.update(
"insert into t_actor (first_name, surname) values (?, ?)",
new Object[] {"Leonor", "Watling"});

SQL문만 다를뿐 모두 update 메서드를 사용하면 된다.
또한 간단한 스토어드프로시져도 update메서드를 이용할수 있다.
this.jdbcTemplate.update(
"call SUPPORT.REFRESH_ACTORS_SUMMARY(?)",
new Object[]{Long.valueOf(unionId)});


3.기타
그밖에 DDL 같은 특수한 쿼리를 실행할때는 execute()메서드를 사용하기도 한다.
this.jdbcTemplate.execute("create table mytable (id integer, name varchar(100))");


출처 : 
http://yunsunghan.tistory.com/239
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST