【问题标题】:exception NamedQuery of name JPQL名称 JPQL 的异常 NamedQuery
【发布时间】:2016-04-13 14:39:39
【问题描述】:

当我尝试执行这个查询时,我得到了这个异常

线程“主”java.lang.IllegalArgumentException 中的异常: NamedQuery of name: odcalls.call not found.

这是我的命名查询

 @NamedQuery(name="odcalls.call", 
             query="SELECT C.count(id)," 
                        + "C.date(CalllocalTime)," 
                        + "C.hour(CalllocalTime) from ODCalls as C " 
                  + "where "
                  + " C.date(CallLocalTime) between date_sub(curdate(), Interval 12 month) and date_sub(curdate(),Interval 1 day) : Date " 
                  + " and C.FirstQueue != 0 : String " 
                  + " and C.Calltype in (1) : int " 
                  + "GROUP BY C.hour(CallLocalTime), C.date(CallLocalTime)")

这是我的 DAO

     public class ODCallsImpl implements IDao <ODCalls> {
         EntityManager em = EntitiyManagerUtil.getInstance().getEntityManager();
         private List<ODCalls> calls = new ArrayList<ODCalls>();

         @SuppressWarnings("unchecked"  @Override
         @PersistenceContext
         public List<ODCalls> getAll() {
              calls = em.createNamedQuery("odcalls.call",ODCalls.class).getResultList();
              em.close();
              return calls;
         }

【问题讨论】:

  • 请格式化您的代码(在 Eclipse 中,选择和Ctrl + Shift + F)。现在绝对无法阅读。
  • 问题是当累比堆栈overglow 说的时候 × 您的帖子似乎包含未正确格式化为代码的代码。请使用代码工具栏按钮或 CTRL+K 键盘快捷键将所有代码缩进 4 个空格。如需更多编辑帮助,请单击 [?] 工具栏图标。
  • @user3656547 我已经格式化了你的文本。我认为您可以接受这些更改。
  • 感谢 Rubio 的格式化
  • 不客气。我刚刚从接受的答案stackoverflow.com/questions/20497816/… 中找到了这个“使用 em.createQuery(... 而不是 em.createNamedQuery()。”

标签: java jpa


【解决方案1】:

尝试在您的实体类中声明您的@NamedQuery

@Entity 
@Table(name="odcalls", schema= "sogedes-db")
@NamedQueries({
    @NamedQuery(name="odcalls.call", 
             query="SELECT C.count(id)," 
                        + "C.date(CalllocalTime)," 
                        + "C.hour(CalllocalTime) from ODCalls as C " 
                  + "where "
                  + " C.date(CallLocalTime) between date_sub(curdate(), Interval 12 month) and date_sub(curdate(),Interval 1 day) : Date " 
                  + " and C.FirstQueue != 0 : String " 
                  + " and C.Calltype in (1) : int " 
                  + "GROUP BY C.hour(CallLocalTime), C.date(CallLocalTime)")
}) 
    public class ODCalls {  
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="ID") 
    private String id; 
    @Column(name="CallLocalTime") 
    @Temporal(TemporalType.TIMESTAMP)   
    private Date calllocaltime; 
    @Column(name="CallType") 
    private int calltype;

【讨论】:

  • @Patrick 此代码不起作用。它说线程“主”java.lang.IllegalArgumentException中的异常:在EntityManager中创建查询时发生异常:异常描述:语法错误解析[odcalls.call]。
  • @user3656547 你想创建 jpql/hql 查询还是原生查询?如果你想创建一个原生的,试试这个@NamedNativeQuery。如果不是,您的查询无效
  • 我想创建 JPQL 查询。我认为我的解析有问题[odcalls.call]
  • @user3656547 对我来说,你的 sql 看起来不像一个有效的 jpql。确保您的查询是有效的 jpql。相反,您可以使用示例查询@NamedNativeQuery
  • 为什么看起来不像?这是我的 sql 查询及其工作。SELECT count(id), date(CalllocalTime), hour(CalllocalTime) from ODCalls where date(CallLocalTime) between date_sub(curdate(), Interval 12 month) and date_sub(curdate(),Interval 1 day) and FirstQueue != 0 and Calltype in (1) GROUP BY hour(CallLocalTime),date(CallLocalTime) 以上是我的JPQL查询。如果发现错误请告诉我
猜你喜欢
  • 2016-04-06
  • 2011-03-09
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 2016-10-07
  • 2019-08-13
  • 1970-01-01
  • 2014-07-23
相关资源
最近更新 更多