Jump to content

Problema com mapeamento com Mybatis


revised

Recommended Posts

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

Citação

ache.ibatis.binding.BindingException: Mapper method 'com.db.services.mapper.VoucherMapper.getActiveVoucher' has an unsupported return type: class com.db.object.Voucher at com.testing.db.factory.TestingStuff_Ricardo.connectGetActiveVoucher(TestingStuff_Ricardo.java:89)

 
 
 
 

 

Alguem consegue perceber o que se passa?

Obrigado,

Ricardo Pereira

Edited by revised
Link to comment
Share on other sites

Bom dia,

Estás a ter um erro de tipo de retorno, na seguinte linha:

Citação

return session.getMapper(VoucherMapper.class).getActiveVoucher();

Pelo que percebi do código deverias retornar um objecto do tipo Voucher e estás a retornar algo que não o esperado.

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

2 horas atrás, apocsantos disse:

Bom dia,

Estás a ter um erro de tipo de retorno, na seguinte linha:

Pelo que percebi do código deverias retornar um objecto do tipo Voucher e estás a retornar algo que não o esperado.

Cordiais cumprimentos,

Apocsantos

 

Bom dia apocsantos,

Afinal não existia nenhum problema com os objetos, consegui resover a situação da formar que menos sentido fazia para mim...

Basicamente no VoucherMapper tive de dizer que aquele update na realidade é um selecte ou seja mudei de @Update para @Select...

Obrigado na mesma pela ajuda.

Cumprimentos.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.