IDEA使用JPA自定义查询,报错Can‘t resolve symbol ‘Type‘

博主在项目设计中使用JPA的注解@Query自定义查询时,遇到Can’t resolve symbol ‘Type’报错。尝试添加persistence.xml并清除缓存重启不可行,最终发现是Hibernate映射关系问题,hql查询应使用EntityName而非实体类名,给出了相应解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天做项目设计时遇到了一个问题,简单的记录一下。

发现问题:在这里插入图片描述
如上图所示,使用JPA的注解@Query来自定义查询,报错Can’t resolve symbol ‘Type’。

解决问题1——不可行:
上网上查了很多资料说是可以按照下面
File -> Project Structure -> Facets -> JPA -> 选择右下角的“+”号 -> persistence.xml

如下图所示:
在这里插入图片描述
添加之后可能还是报错,继续下面的操作:File -> Invalidate Caches/Restart ,其实就是清除缓存重启。
但是等重启之后还是报相同的错误。

解决问题2——可行

  • @Query注解下的JPA语句的写法,和原生的sql语句不一样。select t from Type t 代表的意思是从Type实体类类维护的表中查询所有的数据(使用JPA通过实体类去维护数据库表,所以可以通过Type实体类去对应的表中查询数据)。
  • select 实体类别名 from 实体类 实体类别名
  • 但是这里的错误原因其实是Hibernate映射关系出现了问题,hql查询时使用的from Xxx,Xxx不是实体类的名称,而是EntityName(Hibernate注解)。若 @Entity后并没有显示的指明EntityName,默认采用实体类的名称;若显示地指明了 EntityName,因此在使用hql查询的时候,要from EntityName,而不是from 实体类名。
  • 在我的代码里面,有实体类Tag、Type、Blog等,但是注解都有指明 @Entity(name=“t_type”)等,所以在Dao层应该采用以下的方法:
@Query("select t from t_type t")
List<Type> findTop(Pageable pageable);

以下是实体类里面的部分代码注解截图
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

运行环境 .NET Framework2.0 开发工具 Microsoft Visual Studio 2005 二. 部分代码说明(主要讲解异步分析和下载): 异步分析下载采取的策略是同时分析同时下载,即未等待数据全部分析完毕就开始把已经分析出来的图片链接开始下载。下载成功的均在List框链接前面划上了√ ,未能下载的图片有可能是分析错误或者是下载异常。 1. 异步分析部分代码 /// /// 异步分析下载 /// private void AsyncAnalyzeAndDownload(string url, string savePath) { this.uriString = url; this.savePath = savePath; #region 分析计时开始 count = 0; count1 = 0; freq = 0; result = 0; QueryPerformanceFrequency(ref freq); QueryPerformanceCounter(ref count); #endregion using (WebClient wClient = new WebClient()) { AutoResetEvent waiter = new AutoResetEvent(false); wClient.Credentials = CredentialCache.DefaultCredentials; wClient.DownloadDataCompleted += new DownloadDataCompletedEventHandler(AsyncURIAnalyze); wClient.DownloadDataAsync(new Uri(uriString), waiter); //waiter.WaitOne(); //阻止当前线程,直到收到信号 } } /// /// 异步分析 /// protected void AsyncURIAnalyze(Object sender, DownloadDataCompletedEventArgs e) { AutoResetEvent waiter = (AutoResetEvent)e.UserState; try { if (!e.Cancelled && e.Error == null) { string dnDir = string.Empty; string domainName = string.Empty; string uri = uriString; //获得域名 http://www.sina.com/ Match match = Regex.Match(uri, @"((http(s)?://)?)+[\w-.]+[^/]");//, RegexOptions.IgnoreCase domainName = match.Value; //获得域名最深层目录 http://www.sina.com/mail/ if (domainName.Equals(uri
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值