初学jpa遇到的各种“坑”
1、在写Repository类的时候,写自定义的@Query语句的时候,报错如下:
注意:
-
select from后跟的不是表名,是Entity对象名。
-
如果为Entitiy对象设置了name为“NetPool”,则Entitty对象名就是name后的名字;如果没有设置name,默认使用public class后的“NetPoolE”类名。
- where后的对象别名 . 属性名,这里的属性名不是@Cloumn(name="")的name的名字。而是当前Entity对象的property,也就是private Integer vlanNO中的vlanNO。
故此会报错。
如例子所示:
@Entity(name = "NetPool") public class NetPoolE { /** * 主键 网络池Id * (底层cloudVM中网络池Id) */ @Id @Column(name="netPoolId") private String netPoolId; /* @Id @GeneratedValue(generator = "uuid") @GenericGenerator(name = "uuid", strategy = "uuid") @Column(name = "netPoolId") private String netPoolId;*/ /** * 网络名称 */ @Column(name = "netName", length = 255) private String netName; /** * vlan号 */ @Column(name = "vlanNo") private Integer vlanNO; /** * 网关 */ @Column(name = "gateway", length = 255) private String gateway; /** * 子网 */ @Column(name = "subNet", length = 255) private String subNet; /** * dns */ @Column(name = "dns", length = 255) private String dns; /** * 同步时间 */ private Date synDate; /** * 是否可用 */ private Boolean isAvl; /** * 组织Id */ private String orgId; /** * 连接信息 */ @Column(length = 500) private String configId; /***此处省略很多setget器*****/ }
public interface NetPoolRepository extends JpaRepository<NetPoolE, String> {
/**
* 输入字符,模糊匹配 vlanNo或网关或子网或dns的值,分页显示所有虚拟网络
*
* @param vlanNo
* vlan号
* @param gateway
* 网关
* @param subnet
* 子网
* @param dns
* dns
* @param pageable
* 分页信息
* @return Page<NetPoolE>
* 虚拟网络分页列表
*/
@Query("SELECT np FROM NetPoolE np where np.vlanNo=?1 or np.gateway=?2 or np.subNet=?3 or np.dns=?4")
List<NetPoolE> queryVlanNoORgatewayORsubNetORdns(Integer vlanNo, String gateway, String subnet, String dns);
}
在spring boot 启动的时候报错:
Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: NetPoolE is not mapped [SELECT np FROM NetPoolE np where np.vlanNo=?1 or np.gateway=?2 or np.subNet=?3 or np.dns=?4] at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1750) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:331) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_60] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_60] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_60] at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_60] at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:344) ~[spring-orm-4.2.4.RELEASE.jar:4.2.4.RELEASE] at com.sun.proxy.$Proxy77.createQuery(Unknown Source) ~[na:na] at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:86) ~[spring-data-jpa-1.9.2.RELEASE.jar:na] ... 68 common frames omitted Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: NetPoolE is not mapped [SELECT np FROM NetPoolE np where np.vlanNo=?1 or np.gateway=?2 or np.subNet=?3 or np.dns=?4] at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:96) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:120) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:234) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:131) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:93) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1836) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:328) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final] ... 75 common frames omitted Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: NetPoolE is not mapped at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:189) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:109) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:95) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:338) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3678) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3567) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:708) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:564) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:249) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] ... 83 common frames omitted
如果把select语句中的NetPoolE改为NetPool后,仍然提示报错:
org.hibernate.QueryException: could not resolve property: vlanNo of: com.sugon.cloudview.cloudmanager.resource.serviceImpl.dao.entity.vnet.NetPoolE
这个原因是因为vlanNo在NetPool的Entity对象中找不到,也就是说最上面注意中的第3条。
相关推荐
这个压缩包文件"SSH-JPA.ZIP"提供的内容是一个SSH-JPA的实例,对于初学者或者开发者来说,是深入理解SSH-JPA集成应用的宝贵资料。 首先,我们来详细了解SSH中的每个组件: 1. Spring:这是一个全面的Java企业级...
SpringBoot与JPA的整合是现代Java开发中的常见实践,特别是在构建微服务或者轻量级应用时。SpringBoot以其简洁的配置和强大的依赖管理而受到欢迎,而JPA(Java Persistence API)作为Java官方推荐的ORM(Object-...
jpa_hibernate_shiro,spring_jpa_hibernate_shiro.zip 里有代码,spring_jpa_hibernate常用的小弟就没有单独说明了,在项目配置文件里写得比较清楚,小弟在主要是shiro权限控制做了单独说明,如有什么问题联系发...
JPA注解参考_Oracle.chm 通过它可以全面的掌握JPA编程
**Spring Data JPA** 是一个基于 **Java** 的开源框架,它是 **Spring Framework** 的一个模块,主要用于简化 **Java Persistence API (JPA)** 的使用。JPA 是 Java 平台上的一个标准,用于管理和持久化应用程序的...
本示例"Spring2.5_JPA_Transaction_Demo"专注于演示如何在Spring 2.5版本中结合JPA进行事务管理,这对于理解Spring和JPA的整合以及事务处理机制至关重要。 1. **Spring 2.5**:这是一个里程碑式的版本,引入了许多...
4. 社区支持:Hibernate有庞大的社区和丰富的文档,对于问题解决和新功能探索更为便利。 压缩包中的“JPA Sharing.ppt”可能详细阐述了这些概念,并通过实例展示了如何在项目中配置和使用JPA,以及如何对比和选择...
Java Persistance API(JPA)是Java平台上的一个标准,用于管理关系数据库中的对象持久化。它是Java EE和Java SE应用程序中的一个重要组成部分,为开发者提供了一种声明式的方式来处理数据库操作,简化了数据库访问...
**Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的数据,它提供了对象/关系映射(ORM)功能,使得开发者可以用Java对象来操作数据库。JPA通过提供API和元数据来定义如何将Java类映射...
收集整理在JSE环境中使用JPA的资料,不需要使用任何JEE的容器。
Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的数据。它提供了一种面向对象的方式来处理数据库操作,使得开发人员可以使用Java对象来操作数据库记录,而无需编写大量的SQL语句。本课程...
JPA视频_PPT及源码 · 1. JPA视频_概述 · 2. JPA视频_HelloWorld · 3. JPA视频_基本注解 · 4. JPA视频_Transient注解 · 5. JPA视频_Temporal注解 · 6. JPA视频_Table主键生成策略 · 7. JPA视频_...
标题 "filesystem-master_java_springdatajpa_springboot_hibernate_文件服务器_" 暗示了一个项目,它涉及使用Java技术栈,特别是Spring Data JPA、Spring Boot和Hibernate,来构建一个文件服务器。这个项目可能重点...
**JPA 联合主键详解** 在Java Persistence API(JPA)中,主键是用于唯一标识数据库表中每一行记录的关键字段。在某些情况下,一个实体可能需要多个字段来唯一标识其实例,这时就需要使用联合主键。本篇文章将深入...
关于"jpa_封装dao"的实践,通常包括以下几个步骤: 1. 定义实体类:根据数据库表结构创建对应的Java类,并使用JPA注解进行映射。 2. 创建Repository接口:继承Spring Data JPA提供的JpaRepository或CrudRepository...
避免使用过于复杂的JPQL查询,考虑使用JOIN fetch来预加载关联,减少N+1查询问题。此外,合理设置实体的装载模式,如选择性地加载关联,有助于提升性能。 总结,JPA为Java开发者提供了简洁且强大的ORM框架,简化了...
在JavaEE平台上,Java Persistence API(JPA)是用于管理和持久化对象的规范,它为开发者提供了一种标准的方式来处理数据库交互。这个“JPA.rar”压缩包文件包含了一个基于JPA实现的订单管理系统的源代码,这为我们...