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());
        }
    }
}

输出结果

数据库记录

好了就写到这吧

目录
相关文章
|
14天前
|
SQL 缓存 Java
框架分析(9)-Hibernate
框架分析(9)-Hibernate
|
14天前
|
SQL 缓存 Java
Java一分钟之-Hibernate:ORM框架实践
【5月更文挑战第15天】Hibernate是Java的ORM框架,简化数据库操作。本文列举并解决了一些常见问题: 1. 配置SessionFactory,检查数据库连接和JDBC驱动。 2. 实体类需标记主键,属性映射应匹配数据库列。 3. 使用事务管理Session,记得关闭。 4. CRUD操作时注意对象状态和查询结果转换。 5. 使用正确HQL语法,防止SQL注入。 6. 根据需求配置缓存。 7. 懒加载需在事务内处理,避免`LazyInitializationException`。理解和避免这些问题能提升开发效率。
33 0
|
14天前
|
SQL Java 数据库连接
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
|
14天前
|
SQL Java 关系型数据库
数据库访问:什么是Hibernate框架?
【4月更文挑战第15天】Hibernate是开源ORM框架,将Java对象与数据库表映射,简化对象-关系映射,提升开发效率和性能。它自动化处理数据操作,支持多种数据库,自动生成SQL,提供配置选项和高级特性,减少手动SQL编写,便于切换数据库。
29 2
|
10月前
|
SQL XML 存储
Hibernate框架【五】——基本映射——多对多映射
Hibernate框架【五】——基本映射——多对多映射
135 0
|
8月前
|
Java 数据库连接
简述使用Hibernate框架的几个步骤
简述使用Hibernate框架的几个步骤
41 0
|
9月前
|
SQL Java 关系型数据库
Hibernate框架概述
Hibernate框架概述
86 0