Я пытаюсь получить некоторые данные из БД с помощью 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
}
]