我正在尝试从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看起来像这样:
真正奇怪的部分是,如果我在调试期间将其停止,并使用1
而不是给定的id
来评估查询,那么它就可以正常工作,但是如果我对37
进行硬编码它将在第一次评估时抛出EntityNotFoundException
并在第二次评估时返回一个值(尽管大多数字段都具有默认值-空值,零值等,而不是数据库中的实际值)。
我在使用session.get(SessionTable.class, id)
时遇到了同样的问题(第一次是空值,第二次是半空的SessionTable,希望使用Criteria Api可以解决这个问题。它不是:(>
有人遇到过类似情况吗?
谢谢。