`

初学jpa遇到的问题_小记

 
阅读更多

初学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 DAO_java web ssh jpa_jpa_ssh_ssh jpa

    这个压缩包文件"SSH-JPA.ZIP"提供的内容是一个SSH-JPA的实例,对于初学者或者开发者来说,是深入理解SSH-JPA集成应用的宝贵资料。 首先,我们来详细了解SSH中的每个组件: 1. Spring:这是一个全面的Java企业级...

    springboot_jpa.zip_SpringBoot JPA_jpa_slightokb_springboot

    SpringBoot与JPA的整合是现代Java开发中的常见实践,特别是在构建微服务或者轻量级应用时。SpringBoot以其简洁的配置和强大的依赖管理而受到欢迎,而JPA(Java Persistence API)作为Java官方推荐的ORM(Object-...

    spring_jpa_hibernate_shiro整合(maven)

    jpa_hibernate_shiro,spring_jpa_hibernate_shiro.zip 里有代码,spring_jpa_hibernate常用的小弟就没有单独说明了,在项目配置文件里写得比较清楚,小弟在主要是shiro权限控制做了单独说明,如有什么问题联系发...

    JPA注解参考_Oracle.chm

    JPA注解参考_Oracle.chm 通过它可以全面的掌握JPA编程

    Spring Data JPA中文文档[1.4.3]_springdatajpa_erlang_waitxpf_

    **Spring Data JPA** 是一个基于 **Java** 的开源框架,它是 **Spring Framework** 的一个模块,主要用于简化 **Java Persistence API (JPA)** 的使用。JPA 是 Java 平台上的一个标准,用于管理和持久化应用程序的...

    Spring2.5_JPA_Transaction_Demo

    本示例"Spring2.5_JPA_Transaction_Demo"专注于演示如何在Spring 2.5版本中结合JPA进行事务管理,这对于理解Spring和JPA的整合以及事务处理机制至关重要。 1. **Spring 2.5**:这是一个里程碑式的版本,引入了许多...

    JPA.rar_jpa

    4. 社区支持:Hibernate有庞大的社区和丰富的文档,对于问题解决和新功能探索更为便利。 压缩包中的“JPA Sharing.ppt”可能详细阐述了这些概念,并通过实例展示了如何在项目中配置和使用JPA,以及如何对比和选择...

    JPA.zip_JAVA 导出PDF_jpa api_jpa pdf

    Java Persistance API(JPA)是Java平台上的一个标准,用于管理关系数据库中的对象持久化。它是Java EE和Java SE应用程序中的一个重要组成部分,为开发者提供了一种声明式的方式来处理数据库操作,简化了数据库访问...

    JPA技术.zip_JPA开发文档_SpringBoot JPA

    **Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的数据,它提供了对象/关系映射(ORM)功能,使得开发者可以用Java对象来操作数据库。JPA通过提供API和元数据来定义如何将Java类映射...

    jpa.rar_jpa_jpa c++

    收集整理在JSE环境中使用JPA的资料,不需要使用任何JEE的容器。

    07_传智播客JPA详解_使用JPA加载_更新_删除对象

    Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的数据。它提供了一种面向对象的方式来处理数据库操作,使得开发人员可以使用Java对象来操作数据库记录,而无需编写大量的SQL语句。本课程...

    尚硅谷JPA视频教程

    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_文件服务器_

    标题 "filesystem-master_java_springdatajpa_springboot_hibernate_文件服务器_" 暗示了一个项目,它涉及使用Java技术栈,特别是Spring Data JPA、Spring Boot和Hibernate,来构建一个文件服务器。这个项目可能重点...

    JPA_5_联合主键

    **JPA 联合主键详解** 在Java Persistence API(JPA)中,主键是用于唯一标识数据库表中每一行记录的关键字段。在某些情况下,一个实体可能需要多个字段来唯一标识其实例,这时就需要使用联合主键。本篇文章将深入...

    JPA.rar_JPA 封装DAO

    关于"jpa_封装dao"的实践,通常包括以下几个步骤: 1. 定义实体类:根据数据库表结构创建对应的Java类,并使用JPA注解进行映射。 2. 创建Repository接口:继承Spring Data JPA提供的JpaRepository或CrudRepository...

    07_JPA详解_使用JPA加载_更新_删除对象.zip

    避免使用过于复杂的JPQL查询,考虑使用JOIN fetch来预加载关联,减少N+1查询问题。此外,合理设置实体的装载模式,如选择性地加载关联,有助于提升性能。 总结,JPA为Java开发者提供了简洁且强大的ORM框架,简化了...

    JPA.rar_JAVAEE系统_JavaEE_Javaee jpa_订单管理

    在JavaEE平台上,Java Persistence API(JPA)是用于管理和持久化对象的规范,它为开发者提供了一种标准的方式来处理数据库交互。这个“JPA.rar”压缩包文件包含了一个基于JPA实现的订单管理系统的源代码,这为我们...

Global site tag (gtag.js) - Google Analytics