Java jpa查询没有';似乎无法正确解析枚举值,并且始终返回空列表
我正在编写一个非常简单的查询,它只查询具有给定状态的Foo对象,但是我得到的结果总是一个空列表,但是我真的不知道我的代码出了什么问题 我的Java jpa查询没有';似乎无法正确解析枚举值,并且始终返回空列表,java,mysql,jpa,persistence,enumeration,Java,Mysql,Jpa,Persistence,Enumeration,我正在编写一个非常简单的查询,它只查询具有给定状态的Foo对象,但是我得到的结果总是一个空列表,但是我真的不知道我的代码出了什么问题 我的findByStatus方法如下所示: public List<Foo> findByStatus(final Status status, final int startIndex, final int maxRows) { List<Foo> foos= getJpaTemplate().executeFind(new Jp
findByStatus
方法如下所示:
public List<Foo> findByStatus(final Status status, final int startIndex, final int maxRows)
{
List<Foo> foos= getJpaTemplate().executeFind(new JpaCallback()
{
@Override
public Object doInJpa(EntityManager entityManager) throws PersistenceException
{
Query q = entityManager.createQuery("SELECT f FROM Foo f WHERE f.status = :status", Foo.class);
q.setParameter("status", status); //This will not automatically resolve???
q.setFirstResult(startIndex).setMaxResults(maxRows);
return q.getResultList();
}
});
return foos == null ? Collections.EMPTY_LIST : foos;
}
public class Foo
{
@Enumerated(EnumType.STRING) @Column(nullable=false, columnDefinition = "VARCHAR(10) DEFAULT 'ON'")
private Status status= Status.ON;
//other fields
}
状态是这样的
public enum Status
{
ON("ON"),
OFF("OFF"),
UNKNOWN("UNKNOWN");
private String status;
private Status(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
}
看起来hibernate将我的枚举值绑定到某个VARBINARY,这很奇怪:
2013-12-27 11:38:35,341 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - <binding parameter [1] as [VARBINARY] - ON>
2013-12-27 11:38:35341跟踪[org.hibernate.type.descriptor.sql.BasicBinder]-
我在一个特定的应用程序中遇到了同样的问题
该hibernate中的根本原因是忽略@Enumerated注释,并始终将枚举作为
VARBINARY请为您的JPA提供商打开SQL语句日志记录,并让我们知道生成的SQL是什么样子。啊,这是我想问的另一个问题,如果我在这里显得迟钝,很抱歉,但是我如何打开它?我一直在搞乱我的调试器,试图获取生成的查询,但没有多大成功。这取决于提供程序。如果您使用的是Hibernate,请在您的记录器中打开
org.Hibernate.SQL
的日志以进行调试。我在Hibernate站点上找到了一些说明,但我认为我无法访问此项目中的低级别配置。事情似乎基本上就是所谓的“封装良好”。是否有其他方式来查看生成的查询?不,仅此而已。您应该学习如何使用日志系统。log4j和logback都可以通过更改顶级项目中的配置文件来轻松更改记录器的日志级别。