找不到条件API实体异常

时间:2019-03-03 14:38:36

标签: java postgresql criteria-api

我正在尝试从PostreSQL数据库中读取一个行,该行我知道该数据库中存在的实体并获取javax.persistence.EntityNotFoundException。

这是我读取实体的代码:

Public SessionTable findOne(Integer id) {
Session session = getSession();
    CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
    CriteriaQuery<SessionTable> criteriaQuery = criteriaBuilder.createQuery(SessionTable.class);
    Root<SessionTable> root = criteriaQuery.from(SessionTable.class);
    criteriaQuery.select(root).where(criteriaBuilder.equal(root.get("session_id"), 37));
    Query<SessionTable> query = session.createQuery(criteriaQuery);
    List<SessionTable> list = query.list();
    return list.isEmpty() ? null : list.get(0);
}

查询jpqlQuery是select generatedAlias0 from SessionTable as generatedAlias0 where generatedAlias0.session_id=37

我的SessionTable类如下:

@Entity
@Table(name = "session_tbl")
public class SessionTable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "session_gen")
    @SequenceGenerator(name = "session_gen", sequenceName = "session_id_seq", allocationSize = 1)
    @Column(name = "session_id")
    private Integer session_id;

    @Column(name = "name")
    private String name;

    // some more fields and methods - constructors, getters, setters, to string etc.
}

我的session_tbl看起来像这样:

enter image description here

真正奇怪的部分是,如果我在调试期间将其停止,并使用1而不是给定的id来评估查询,那么它就可以正常工作,但是如果我对37进行硬编码它将在第一次评估时抛出EntityNotFoundException并在第二次评估时返回一个值(尽管大多数字段都具有默认值-空值,零值等,而不是数据库中的实际值)。

我在使用session.get(SessionTable.class, id)时遇到了同样的问题(第一次是空值,第二次是半空的SessionTable,希望使用Criteria Api可以解决这个问题。它不是:(

有人遇到过类似情况吗?

谢谢。

0 个答案:

没有答案