Boa noite pessoal
Estou a fazer a seguinte query a BD que tenho criada em PostGres :
UPDATE "NTFGWDB"."Voucher"
SET state_id = 3
WHERE serial_number = (SELECT serial_number
FROM "NTFGWDB"."Voucher"
WHERE group_id = 1 AND state_id = 1
ORDER BY v.id ASC
limit 1)
RETURNING serial_number;
Basicamente preciso de um voucher que esteja ativo e pertença a um determinado grupo, como preciso de fazer a reserva desse voucher coloco o estado em reservado e retorno o voucher mais antigo com estas condições.
Estou a utilizar o mybatis para fazer o mapeamento mas estou a ter problemas com esta query.
VoucherMapper
@Update("UPDATE \"NTFGWDB\".\"Voucher\"\n" +
" SET state_id = 3\n" +
" WHERE serial_number = (SELECT serial_number\n" +
" FROM \"NTFGWDB\".\"Voucher\"\n" +
" WHERE group_id = 1 AND state_id = 1\n" +
" ORDER BY id ASC\n" +
" limit 1)\n" +
" RETURNING *")
@Results({
@Result(property = "id", column = "id"),
@Result(property = "serialNumber", column = "serial_number"),
@Result(property = "activationCode", column = "activation_code"),
@Result(property = "groupId", column = "group_id"),
@Result(property = "expiricyDate", column = "expiricy_date"),
@Result(property = "stateChangeDate", column = "state_change_date"),
@Result(property = "loadedDate", column = "loaded_date"),
@Result(property = "stateId", column = "state_id")
})
public Voucher getActiveVoucher();
VoucherService
@Override
public Voucher getActiveVoucher() {
SqlSession session = sqlFactory.openSession();
try {
return session.getMapper(VoucherMapper.class).getActiveVoucher();
} finally {
session.close();
}
}
Construtor
public Voucher(long id, long serialNumber, long activationCode, int groupId, Date expiricyDate, int stateId, Date stateChangeDate, Date loadedDate) {
this.id = id;
this.serialNumber = serialNumber;
this.activationCode = activationCode;
this.groupId = groupId;
this.expiricyDate = (Date) expiricyDate.clone();
this.stateId = stateId;
this.stateChangeDate = (Date) stateChangeDate.clone();
this.loadedDate = (Date) loadedDate.clone();
}
Main
@Test
public void connectGetActiveVoucher() {
Voucher voucher = new VoucherService().getActiveVoucher();
System.out.println(voucher);
}
Ao compilar acontece o seguinte erro :
ache.ibatis.binding.BindingException: M
Alguem consegue perceber o que se passa?
Obrigado,
Ricardo Pereira
↧