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 신고  댓글주소  수정/삭제  댓글쓰기

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




JPA Domain 을 디비에 자동으로 생성되게 해놓았는데


AWS RDS 에 DB 를 새로 세팅하고 MySQL 에서 Foreign key 걸때 아래와 같이 에러가 났다.


Error Code: 1215. Cannot add foreign key constraint


이것저것 보다보니 Dump 떠서 생성했던 기존 Table.Column 의 Collation 과 JPA 가 생성한 Collation 이 다르네


하나는 utf8_general_ci, 다른 하나는 utf8_bin 


두개가 서로 맞지않으면서 foreign key 생성이 안되던 문제


해결책은 아래



http://confluence.goldpitcher.co.kr/pages/viewpage.action?pageId=138838813

YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST



AWS CloudSearch


AWS 관련자료가 원래 잘 없지만 CloudSearch 에 대한 자료는 더 없고

Java SDK 를 사용한 자료는 더 없다. 


간단하게 검색하는 방법입니다.


Document 를 업데이트하는건 전편에 설명



Java


AmazonCloudSearchDomainClient domain = new AmazonCloudSearchDomainClient(getCredentials());
domain.setEndpoint("search-**************.cloudsearch.amazonaws.com");

SearchRequest request = new SearchRequest();

long pageSize = 20;
long startIndex = 0 * pageSize; // 기본 0

String sort = "_score desc,id desc";

String filterQuery = "kind:'hello'";
String returnFields = "_all_fields,_score";
String queryOptions = "{ \n" +
" \"defaultOperator\":\"or\",\n" +
" \"fields\":[ \n" +
" \"name^5\",\n" +
" \"description^3\",\n" +
" \"tags^3\",\n" +
" \"colors^3\",\n" +
" \"category_names^3\",\n" +
" \"file_extensions^2\",\n" +
" \"creator_name\"\n" +
" ],\n" +
" \"operators\":[ \n" +
" \"and\",\n" +
" \"escape\",\n" +
" \"fuzzy\",\n" +
" \"near\",\n" +
" \"not\",\n" +
" \"or\",\n" +
" \"phrase\",\n" +
" \"precedence\",\n" +
" \"prefix\",\n" +
" \"whitespace\"\n" +
" ]\n" +
"}";

request.withQueryParser(QueryParser.Simple)
.withQuery(keyword)
.withStart(startIndex)
.withSize(pageSize)
.withSort(sort)
.withFilterQuery(filterQuery)
.withReturn(returnFields)
.withQueryOptions(queryOptions)
;

SearchResult searchResult = domain.search(request);

queryOptions 의 fields 는 검색대상들이며

name^5 라고 된것이 있는데

field에 weight 를 주고 _score 를 높여 더 높은 검색순위로 끌어올릴 수 있다.

기본 weight는 1 이고, 0.1 도 가능



Query 표현식 조합 방법은

http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-compound-queries.html



예를 들어 filterQuery 를 조합할때


kind:hello 이고, status:Active, 이고, category_codes Array 값중 30이 포함된 항목을 필터링 하고싶으면


(and kind:'hello' status:'Active' (phrase field='category_codes' 30) )






Result

{
"status": {
"timems": 5,
"rid": "/M7W4bsqOgq1pko\u003d"
},
"hits": {
"found": 8,
"start": 0,
"hit": [
{
"id": "Marketplace_291",
"fields": {
"thumbnail": [
"http://**************/7b12910b-cc3c-4494-a504-ba00226b27f7.jpg"
],
"kind": [
"Marketplace"
],
"description": [
"Test"
],
"category_names": [
"Video Motion",
"Apple Motion Templates",
"Product Promo"
],
"_score": [
"15.213767"
],
"file_size": [
"21798.0"
],
"file_extensions": [
"jpg"
],
"happened_date": [
"2016-03-28T07:16:41.984Z"
],
"category_codes": [
"30",
"209",
"1730"
],
"creator_email": [
"hello@hello.com"
],
"price": [
"3.0"
],
"name": [
"Video Motion Apple"
],
"creator_name": [
"Creator"
],
"id": [
"291"
]
}
},
.............
]
}
}


결과중 짜증나는건, Field Type 이 Array 가 아닌것들도 Array 로 온다.........





'AWS > CloudSearch' 카테고리의 다른 글

[CloudSearch] Java SDK 사용하여 Search 하기  (0) 2016.03.29
[CloudSearch] Java SDK 로 document update  (0) 2016.03.28
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST