how to increment field value in update query?

788 weergaven
Naar het eerste ongelezen bericht

Lex Luthor

ongelezen,
8 okt 2015, 06:13:2208-10-2015
aan Querydsl
Is it possible to increment a numeric value while executing a JPA update query?

By way of example:

  QSeatRequest seatRequest = QSeatRequest.seatRequest;
  QSeatPreference seatPreference = QSeatPreference.seatPreference;
  JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);

  return queryFactory.update(seatPreference)
      .set(seatPreference.effectiveTo, DateTime.now())
      .set(seatPreference.version, /* increment the current field value here somehow */)
      .where(seatPreference.seatRequest.in(
          JPAExpressions.selectFrom(seatRequest)
              .where(seatRequest.businessKey.eq(getBusinessKey())
              .and(seatRequest.effectiveTo.eq(MAX_EFFECTIVE_END_DATE))))
      .and(seatPreference.effectiveTo.eq(MAX_EFFECTIVE_END_DATE))
      .and(seatPreference.id.notIn(mapIds(getSeatsPreferences(), SeatPreference::getId))))
      .execute();



Lex Luthor

ongelezen,
8 okt 2015, 08:15:3708-10-2015
aan Querydsl
Never mind. I've answered my own question:

  return queryFactory.update(seatPreference)
      .set(seatPreference.effectiveTo, DateTime.now())
      .set(seatPreference.version, seatPreference.version.add(1))

      .where(seatPreference.seatRequest.in(
          JPAExpressions.selectFrom(seatRequest)
              .where(seatRequest.businessKey.eq(getBusinessKey())
              .and(seatRequest.effectiveTo.eq(MAX_EFFECTIVE_END_DATE))))
      .and(seatPreference.effectiveTo.eq(MAX_EFFECTIVE_END_DATE))
      .and(seatPreference.id.notIn(mapIds(getSeatsPreferences(), SeatPreference::getId))))
      .execute();

timowest

ongelezen,
11 okt 2015, 04:57:3911-10-2015
aan Querydsl
Sorry, I missed this. Your solution looks good.
Allen beantwoorden
Auteur beantwoorden
Doorsturen
0 nieuwe berichten