hibernate5 Cannot create TypedQuery for query with more than one return using requested result type

简介: hibernate5 Cannot create TypedQuery for query with more than one return using requested result type

一、环境

1、hibernate 5.3.1.Final

Maven POM格式

<!-- hibernate -->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>5.3.1.Final</version>
    </dependency>

2、IDE IntelliJ IDEA 2020

版本很关键,不写版本号发技术文章就是耍流氓

二、BUG

Exception in thread "main" java.lang.IllegalArgumentException: Cannot create TypedQuery for query with more than one return using requested result type [com.yadinghao.entity.po.User]

说白了点就是类型不匹配

我的代码,实体类:

package com.yadinghao.entity.po;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity(name = "user")
@Data
public class User {
    public  String age;
    @Id
    public String name;
}

核心代码

package com.yadinghao.demo;
import com.yadinghao.entity.po.User;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.NativeQuery;
import org.hibernate.query.Query;
import org.hibernate.service.ServiceRegistry;
import javax.jws.soap.SOAPBinding;
import java.sql.SQLException;
import java.util.List;
public class hibernatedemo {
    //POJO 创建数据库表
    public static void main(String[] args) {
        Configuration config = new Configuration();
        config.configure("hibernate.cfg.xml");
        // 创建工厂
        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
        SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
        // creating session object
        Session session = sessionFactory.openSession();
        String sql = "select name,age from user";
        Query<User> query = session.createQuery(sql,User.class);
        List<User> list = query.list();
        System.out.println(list.size());
        for(User user : list){
            System.out.println(user.getName());
        }
    }
}

错误是这句

Query<User> query = session.createQuery(sql,User.class);

反正我是没搞懂为啥错误。把泛型去了就没事

Query query = session.createQuery(sql);

但是在转List或实体的时候会很麻烦。故此一通百度发现各种解决也都 不是我的最可恨的是有个人连Hibernate都不写,更别说版本号了.....

我的解决办法是把创建查询的createQuery改成createNativeQuery。

代码如下:

Query<User> query = session.createNativeQuery(sql,User.class);

完整代码

package com.yadinghao.demo;
import com.yadinghao.entity.po.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import org.hibernate.service.ServiceRegistry;
import java.util.List;
public class hibernatedemo {
    //POJO 创建数据库表
    public static void main(String[] args) {
        Configuration config = new Configuration();
        config.configure("hibernate.cfg.xml");
        // 创建工厂
        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
        SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
        // creating session object
        Session session = sessionFactory.openSession();
        String sql = "select name,age from user";
        Query<User> query = session.createNativeQuery(sql,User.class);
        List<User> list = query.list();
        System.out.println(list.size());
        for(User user : list){
            System.out.println(user.getName());
        }
    }
}

输出结果

数据库记录

好了就写到这吧

目录
相关文章
|
安全 Java 应用服务中间件
Java 近期新闻:Hibernate 6.0、JobRunr 5.0、JHipster 7.8.0、Spring CVEs、JReleaser 1.0-RC2
本期 Java 近期新闻综述内容涉及 JDK 19、Spring Boot、Spring CVEs、Apache Tomcat 点版本、Quarkus Tools for Visual Studio Code、Micronaut 3.4.1、JetBrains 加入 Micronaut 基金会、Open Liberty Paketo Liberty Buildpack、Hibernate 6.0、JobRunr 5.0、WildFly 26.1 Beta S2I 镜像、JReleaser 1.0-RC2、MicroStream 7.0-M2、JHipster 7.8.0、JMH 1.35。
782 0
|
20天前
|
SQL Java 数据库连接
jpa、hibernate、spring-data-jpa、jdbcTemplate
jpa、hibernate、spring-data-jpa、jdbcTemplate
|
4月前
|
存储 Java 数据库连接
Spring Boot 嵌入式服务器、Hibernate 关系和 Spring Data 全解析
Spring Boot 的嵌入式服务器功能是一项方便而强大的功能,它允许你在应用程序中直接运行 Web 服务器,无需将其部署到单独的独立 Web 服务器中。这使得开发、测试和部署 Web 应用程序变得容易,而且它还是轻量级的、易于启动和停止的,易于配置。
67 0
|
4月前
|
XML Java 数据库连接
Hibernate与Spring整合实践实例
Hibernate与Spring整合实践实例
40 0
|
7月前
|
存储 Oracle Java
[亲测可用]hibernate调用Oracle存储过程|Spring Data JPA调用Oracle存储过程方法
[亲测可用]hibernate调用Oracle存储过程|Spring Data JPA调用Oracle存储过程方法
|
9月前
|
Java 数据库连接 数据库
JAVA三大框架Struts、hibernate和spring的各自作用是什么?
JAVA三大框架Struts、hibernate和spring的各自作用是什么?
48 0
|
XML Java 关系型数据库
Spring 项目快速整合 Hibernate
前言 Hibernate 作为前些年广为流行的 ORM 框架,Spring 在诞生之初也进行了支持,并且抽象出一个 spring-orm 模块。
426 0