Hibernate SQLQuery - 按名称获取对象

     2023-02-26     296

关键词:

【中文标题】Hibernate SQLQuery - 按名称获取对象【英文标题】:Hibernate SQLQuery - Get Object by name 【发布时间】:2014-11-09 11:12:38 【问题描述】:

我有一个通过“id”获取类别的方法,我需要一个类似的方法来通过“名称”获取类别。我通过使用 Hibernate 完成了这些方法。如何修复我的第二种方法以按名称获取类别? 我的源代码如下:

// It works
@Override
public Category getById(int id) 
    return (Category) sessionFactory.getCurrentSession().get(Category.class, id);


// It doesn't works
@Override
public Category getByName(String name) 
    return (Category) sessionFactory.getCurrentSession().
        createSQLQuery("SELECT FROM Category WHERE name="+name);

第二种方法出现这个错误:

java.lang.ClassCastException: org.hibernate.impl.SQLQueryImpl 不能 被强制转换为 com.sedae.model.Category

这些是我的控制器。

@RequestMapping(value = "/getCategoryById/id")
public String getCategoryById(Model model, @PathVariable ("id") int id)
    model.addAttribute("category", categoryService.getById(id));
    return "/getCategoryById";


@RequestMapping(value = "/getCategoryByName/name")
public String getCategoryByName(Model model, @PathVariable("name") String name)
    model.addAttribute("category", categoryService.getByName(name));
    return "/getCategoryByName";

提前谢谢大家。

【问题讨论】:

【参考方案1】:

如果您确定表中每个类别名称只有一个条目,那么您可以使用Query#uniqueResult:

Query query= sessionFactory.getCurrentSession().
        createQuery("from Category where name=:name");
query.setParameter("name", name);
Category category = (Category) query.uniqueResult();

确保处理由 uniqueResult 引发的异常。

【讨论】:

谢谢老兄!请再问一个问题。假设我有两个类别(显然具有不同的 id)如何通过避免错误“查询未返回唯一结果:2”来获得特定类别。 ? 在这种情况下查询返回一个列表,您可以遍历列表并获取您想要的对象,或者如果您想要任何一个具有相同类别名称的对象,那么您可以使用query.setMaxResults(1);,这将返回第一个遇到的具有指定类别名称的类别。 嗨@user3487063,谢谢你的回答,我已经改变了我的方法,现在它有两个参数“id”和“name”,当我需要按名称列出我的查询时选择按id和name分门别类,重名没有问题。谢谢老兄的提问。

什么 Hibernate 类型用于 SQLQuery 中的 Serializable 字段

】什么Hibernate类型用于SQLQuery中的Serializable字段【英文标题】:WhatHibernatetypeuseforSerializablefieldinSQLQuery【发布时间】:2014-12-2412:38:49【问题描述】:将Serializablescalar添加到javaSQLQuery的正确方法是什么我有实体“实体”字段之一是@L... 查看详情

hibernate入门----query,criteria,sqlquery

hibernate的QueryHQL(HibernateQueryLanguage)是一种Hibernate专用的查询语句,基于面向对象的模式,将SQL语句转化成对象的操作格式.list()查询多条@Testpublicvoidquery(){//sql:select列名from表明;//hql:select属性名from类名;//select别名.属性from类名as别名... 查看详情

使用复杂的 sqlquery 时如何使用 Hibernate 创建组合对象的映射?

】使用复杂的sqlquery时如何使用Hibernate创建组合对象的映射?【英文标题】:HowtocreatemappingofcomposedobjectwithHibernatewhenusingacomplexsqlquery?【发布时间】:2015-08-1410:37:11【问题描述】:我正在尝试将以下查询与Hibernate的session.createSQLQuer... 查看详情

Hibernate SQLQuery 列表方法返回对象而不是对象数组

】HibernateSQLQuery列表方法返回对象而不是对象数组【英文标题】:HibernateSQLQuerylistmethodreturnsObjectinsteadofobjectarray【发布时间】:2017-08-0907:27:20【问题描述】:我在使用HibernateSQLQuery.list()方法时有这种奇怪的行为。以下是问题描述... 查看详情

hibernate调用存储过程该语句没有返回结果集

...报错publicintsaveStoredProcedure(finalStringTable,finalStringType) getHibernateTemplate().execute(newHibernateCallback() publicObjectdoInHibernate(Sessionsession) throwsHibernateException,SQLException SQLQuerysqlQuery=session.createSQLQuery("callInsertedProcedure(?,?)"); sqlQuery.se... 查看详情

db.Database.SqlQuery 原始数据返回存储过程名称和参数

】db.Database.SqlQuery原始数据返回存储过程名称和参数【英文标题】:db.Database.SqlQueryrawdatareturnsstoredprocedurenameandparameters【发布时间】:2015-05-1820:51:47【问题描述】:我有一个存储过程,它返回包含字符串的1行和1列。我正在使用db... 查看详情

hibernate里createsqlquery

转自:http://blog.csdn.net/jacman/article/details/8591152 一、addEntity()和setResultTransformer()方法 1. 使用SQLQuery 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口。最简单的情况下 查看详情

SQL Query 按重复名称对行进行排序,结果保持最低

】SQLQuery按重复名称对行进行排序,结果保持最低【英文标题】:SQLQuerysortingrowsbyduplicatenamekeepinglowestinresult【发布时间】:2015-01-1522:23:09【问题描述】:我有一个包含11列的表,我想创建一个查询,删除全名列中具有重复名称的... 查看详情

实体框架代码优先 - 为 SqlQuery 配置映射

】实体框架代码优先-为SqlQuery配置映射【英文标题】:EntityframeworkCodeFirst-configuremappingforSqlQuery【发布时间】:2013-01-2121:15:48【问题描述】:我正在使用EntityFramework5(使用CodeFirst方法)从带有参数的遗留存储过程中填充我的一个... 查看详情

JPA SQLQuery 不适用于 java 实体

...发布时间】:2021-07-0418:20:54【问题描述】:我使用Spring和Hibernate开发了我的Java应用程序,并且我有两个实体。@Entity@Table(name="Users")publicclassUserprivateintidUser;privateStringlogin;pri 查看详情

hibernate:创建名称为小写的表

】hibernate:创建名称为小写的表【英文标题】:hibernate:createtablewithnamesinlowercase【发布时间】:2010-12-1201:01:55【问题描述】:Hibernate:我想让hibernate自动生成名称为小写的表。例如,如果我的类名为com.myapp.domain.Customer,hibernate将... 查看详情

Hibernate:自定义实体名称

】Hibernate:自定义实体名称【英文标题】:Hibernate:customentityname【发布时间】:2016-10-1318:29:18【问题描述】:假设我有一个名字很长的实体:@EntitypublicclassSupercalifragilisticexpialidociousPanda...使用Hibernate将其持久化到Postgres数据库可... 查看详情

hibernate查询方式

  1、对象导航查询(1)根据id查询某个客户,在查询到这个客户所有的联系人  2、OID查询(1)根据id查询某一条记录,返回对象  3、hql查询(1)Query对象,写hql语句实现查询  4、QBC查询(1)Criteria对象  5、本地sql... 查看详情

hibernate学习

Hibernate查询方式1对象导航查询(1)根据id查询某个客户,再查询这个客户里面所有的联系人2OID查询(1)根据id查询某一条记录,返回对象3hql查询(1)Query对象,写hql语句实现查询4QBC查询(1)Criteria对象5本地sql查询(1)SQLQuery... 查看详情

hibernate查询方式

Hibernate查询方式1对象导航查询(1)根据id查询某个客户,再查询这个客户里面所有的联系人 2OID查询(1)根据id查询某一条记录,返回对象 3HQL查询(1)Query对象,写hql语句实现查询 4QBC查询(1)Criteria对象 5本地s... 查看详情

org.hibernate.MappingException 出错

】org.hibernate.MappingException出错【英文标题】:Errorwithorg.hibernate.MappingException【发布时间】:2017-03-0210:44:17【问题描述】:当我想运行我的springmvc时遇到问题。这是按名称和角色将用户插入数据库的模型所以,从数据库中获取实体... 查看详情

为啥 Hibernate 将模式名称添加到 Hsql 函数?

】为啥Hibernate将模式名称添加到Hsql函数?【英文标题】:WhyisHibernateaddingschemanametoHsqlfunctions?为什么Hibernate将模式名称添加到Hsql函数?【发布时间】:2016-06-0122:54:42【问题描述】:我们有一个使用Hibernate3.0.3的旧版应用程序。我... 查看详情

hibernate核心文件配置(位置固定src下面名称hibernate.cfg.xml)

<?xmlversion=‘1.0‘encoding=‘UTF-8‘?><!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">< 查看详情