Использование критериев не может получить результат с некоторыми параметрами - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь получить некоторые данные из БД с помощью API JPA Criteria в Spring Boot.Это работает нормально, но если я установлю 2019 в качестве параметра для столбца ANNO, я получу пустой результат.Тот же запрос, сгенерированный в журнале, работает нормально, если я использую его непосредственно в Oracle db.

CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<DTOObject> cq = cb.createQuery(DTOObject.class);

        Root<MY_TABLE> book = cq.from(MY_TABLE.class);

        List<Predicate> predicateList = new ArrayList<Predicate>();

            cq.multiselect(cb.count(book.get("COD_MATRICOLA")), cb.sum(book.get("NUM_ACCORDATO")));
            Predicate predicate = cb.equal(book.get("MY_TABLE_PRIMARY_COMPOSITE").get("ANNO") , "2019");
            predicateList.add(predicate);

        TypedQuery<DTOObject>  query = em.createQuery(cq);
        List<DTOObject> d =  query  .getResultList();

        return d;

Это мои классы:

DTOObject:

...
    private long noStudenti;
    private long importo;

    public DTOObject(long noStudenti, Long importo) {
        super();
        this.noStudenti = noStudenti;
        if(importo!=null)
        this.importo = importo;

    } 

MY_TABLE, который имеет составной первичный ключ:

@Entity
public class MY_TABLE implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;


    @EmbeddedId
    private MY_TABLE_PRIMARY_COMPOSITE MY_TABLE_PRIMARY_COMPOSITE;

    private String COD_MATRICOLA;
    private Long NUM_ACCORDATO;

//Getters & Setters

MY_TABLE_PRIMARY_COMPOSITE:

@Embeddable
public class MY_TABLE_PRIMARY_COMPOSITE  implements Serializable {


    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Column(name = "ANNO", nullable = false)
    private String ANNO;

    @Column(name = "COD_ID", nullable = false) 
    private String COD_ID;

//Getters & Setters

И это запрос, сгенерированный в журналах:

select count(t_isbr_sta0_.COD_MATRICOLA) as col_0_0_, sum(t_isbr_sta0_.NUM_ACCORDATO) as col_1_0_ from MY_TABLE my_table where my_table.ANNO=? and my_table.COD_ID_ENTE=156144726

If I 'попробую выполнить этот код, я получу:

[
    {
        "noStudenti": 0,
        "importo": 0
    }
]

Тот же запрос на БД дает мне:

col_0_0   col_0_1
463   4090614,56

Если я изменю 2019 на 2018, 2016 или другие годы, он работаетштраф:

[
    {
        "noStudenti": 407,
        "importo": 4085614
    }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...