【问题标题】:JPA error: The state field path '***' cannot be resolved to a valid typeJPA 错误:状态字段路径“***”无法解析为有效类型
【发布时间】:2017-08-25 05:13:46
【问题描述】:
After running the following query method....   


@Query(value = "select s.owner, " +
            "count(case when s.status = 3 then 1 else null end) as agreed," +
            "count(case when s.status = 2 then 1 else null end) as rejected," +
            "count(case when s.status = 1 then 1 else null end) as pending " +
            "from Schedule s where (s.owner = ?1) " +
            "group by s.owner")

这里的状态是从枚举中获取的,我有一个转换器类。但是在运行时它给出了以下异常,在转换器类 com.orsbv.hcs.model.schedule.ScheduleStatus$TypeConverter 上调用 convertToDatabaseColumn 值为 1 .e

任何有关该问题的帮助都会非常有帮助。寻求专家的关注。

这是错误日志:

ReportQuery(referenceClass=Schedule jpql="select s.owner, count(case when s.status = 1 then 1 else null end) as agreed,count(case when s.status = 2 then 1 else null end) as rejected,count(case when s.status = 3 then 1 else null end) as pending from Schedule s where (s.owner = ?1) group by s.owner")
        at org.eclipse.persistence.exceptions.QueryException.prepareFailed(QueryException.java:1596)
        at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:685)
        at org.eclipse.persistence.queries.ObjectLevelReadQuery.checkPrepare(ObjectLevelReadQuery.java:911)
        at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:615)
        at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:194)
        at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:116)
        at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:102)
        at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:86)
        at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1614)
        at sun.reflect.GeneratedMethodAccessor86.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:344)
        at com.sun.proxy.$Proxy75.createQuery(Unknown Source)
        at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:86)
        ... 48 more
Caused by: javax.persistence.PersistenceException: An exception occurred while calling convertToDatabaseColumn on converter class com.orsbv.hcs.model.schedule.ScheduleStatus$TypeConverter with value 1

【问题讨论】:

  • 你的问题是?你的“问题”的标题和内容之间的关系在哪里?什么操作触发了异常?您尝试解决什么问题?
  • 问题中没有QueryDSL,所以标题固定
  • @JensSchauder 现在请看一看。希望你现在就明白了。
  • 请添加您的转换器类和枚举。

标签: jpa spring-data jpql


【解决方案1】:

你应该这样做

更改 s.status = 3(这应该是枚举) 示例 s.status = Status.ACTIVE

改变 s.status(应该是整数) = 3 示例:s.status.id = 3

【讨论】:

  • @Query(value = "select s.owner, " + "count(case when s.status = com.orsbv.hcs.model.schedule.ScheduleStatus.AGREED then 1 else null end) as同意,” + “计数(当 s.status = com.orsbv.hcs.model.schedule.ScheduleStatus.REJECTED 然后 1 else null 结束时的情况)被拒绝,” + “计数(当 s.status = com.orsbv 时的情况。 hcs.model.schedule.ScheduleStatus.PENDING then 1 else null end) as pending " + " from Schedule s where (s.owner = ?1) " + "group by s.owner") 这解决了它。通过使用完全限定包名。
【解决方案2】:

通过使用完全限定的包名可以解决这个问题。

@Query(value = "select s.owner, " + "count(case when s.status = com.orsbv.hcs.model.schedule.ScheduleStatus.AGREED then 1 else null end) as agreed," + "count(case when s.status = com.orsbv.hcs.model.schedule.ScheduleStatus.REJECTED then 1 else null end) as rejected," + "count(case when s.status = com.orsbv.hcs.model.schedule.ScheduleStatus.PENDING then 1 else null end) as pending " + "from Schedule s where (s.owner = ?1) " + "group by s.owner") 

【讨论】:

    猜你喜欢
    • 2015-04-15
    • 2013-12-02
    • 2016-02-26
    • 2015-04-21
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 2023-01-02
    • 2020-02-01
    相关资源
    最近更新 更多