在hibernate中的以下中hql语句出错:Exception in thread "main" java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.IdentNode \-[IDENT] IdentNode: 'sno' {originalText=sno}
{
SessionFactory sf = new Configuration().configure()
.buildSessionFactory();
Session session = sf.openSession();
// String hql="from Student s where s.sdept in(select s.sdept from s where s.sname='张三')";
String hql="from Student s where s.sno in (select sno from Sc where cno='1')";
Query query=session.createQuery(hql);
List list=query.list();
Iterator it=list.iterator();
while(it.hasNext())
{
Student stu=(Student) it.next();
System.out.println(stu.getSname()+"\t"+stu.getSdept());
}
}
打开Sc.hbm.xml中发现没有sno属性,其内容为:<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.yan.hibernate.Sc" table="sc" catalog="lrdatabase">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<many-to-one name="course" class="com.yan.hibernate.Course" fetch="select">
<column name="cno" />
</many-to-one>
<many-to-one name="student" class="com.yan.hibernate.Student" fetch="select">
<column name="sno" />
</many-to-one>
<property name="grade" type="java.lang.Integer">
<column name="grade" />
</property>
</class>
</hibernate-mapping>
[color=darkred]解决方法是:
将hql语句改为:String hql="from Student s where s.sno in (select student.sno from Sc where cno='1')";[/color]
数据库中建表的情况如下:数据库中建立了三个表student、course、sc表,其关系是sc中的外键sno对应于student表中的sno,sc中的外键cno对应于course中cno,其建表过程为:
/*
MySQL Data Transfer
Source Host: localhost
Source Database: lrdatabase
Target Host: localhost
Target Database: lrdatabase
Date: 2010-4-2 15:49:33
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for course
-- ----------------------------
CREATE TABLE `course` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`cno` int(10) DEFAULT NULL,
`cname` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
`ccredit` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `cno` (`cno`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=gbk;
-- ----------------------------
-- Table structure for sc
-- ----------------------------
CREATE TABLE `sc` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`sno` int(10) DEFAULT NULL,
`cno` int(10) DEFAULT NULL,
`grade` int(10) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `sno` (`sno`),
KEY `cno` (`cno`),
CONSTRAINT `sc_ibfk_1` FOREIGN KEY (`sno`) REFERENCES `student` (`sno`),
CONSTRAINT `sc_ibfk_2` FOREIGN KEY (`cno`) REFERENCES `course` (`cno`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;
-- ----------------------------
-- Table structure for student
-- ----------------------------
CREATE TABLE `student` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`sno` int(10) DEFAULT NULL,
`sname` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
`ssex` varchar(2) CHARACTER SET utf8 DEFAULT NULL,
`sdept` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
`sage` int(10) DEFAULT NULL,
`saddress` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `sno` (`sno`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=gbk;
-- ----------------------------
-- Table structure for user
-- ----------------------------
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
`password` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
`phonetype` tinyint(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=gbk;
-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `course` VALUES ('1', '1', '数据库', '2');
INSERT INTO `course` VALUES ('2', '2', '操作系统', '2');
INSERT INTO `course` VALUES ('3', '3', '软件工程', '3');
INSERT INTO `sc` VALUES ('1', '1', '1', '86');
INSERT INTO `student` VALUES ('1', '1', '张三', '男', '计算机', '20', '北京市');
INSERT INTO `student` VALUES ('2', '2', '李四', '女', '计算机', '21', '河北');
INSERT INTO `student` VALUES ('3', '3', '王五', '女', '法学', '20', '北京市');
INSERT INTO `user` VALUES ('9', '李四', '1', '1');
INSERT INTO `user` VALUES ('10', '王五', '1', '1');
INSERT INTO `user` VALUES ('11', '你好。', '1', '2');
INSERT INTO `user` VALUES ('12', '你好啊。', 'aaa', '1');
INSERT INTO `user` VALUES ('13', 'hello', 'aaa', '1');
INSERT INTO `user` VALUES ('14', 'hello', 'a', '1');
INSERT INTO `user` VALUES ('15', 'hsdfgdsg', '3242', '1');
INSERT INTO `user` VALUES ('16', 'safdasaswerewrw', '3242', '1');
INSERT INTO `user` VALUES ('17', 'erewrw', '3242', '1');
分享到:
相关推荐
Hibernate 查询语言 HQL 是一种面向对象的查询语言,用于检索对象。它提供了灵活多样的查询机制,包括导航对象图、通过标识符检索、使用 HQL 检索对象、使用 Hibernate 条件 API 和使用本地 SQL 查询等。 在 ...
以上就是关于Hibernate中HQL查询的相关知识点的详细介绍。这些知识点涵盖了HQL的基本概念、查询方法、各种高级查询技巧以及Session的管理等方面,希望能够帮助大家更好地理解和掌握Hibernate的HQL查询技术。
hibernate3-hql.jar .
Hibernate框架Hql语句in中带参数的写法 Hibernate框架中,在使用HQL语句时,需要传递参数,而在HQL语句中使用in关键字时,需要特别注意参数的传递方式。在本文中,我们将讨论如何在HQL语句中使用in关键字带参数的...
通过以上步骤,可以有效地解决WebLogic 12环境中因Hibernate版本不兼容而导致的`org.hibernate.hql.ast.HqlToken`类冲突问题。这种方法不仅适用于WebLogic 12,对于其他版本的WebLogic服务器同样适用,关键在于正确...
hibernate-HQL语句大全
`session.createQuery(hql)` 创建了一个 `Query` 对象,通过 `setParameter` 方法设置参数值,最后通过 `query.list()` 获取查询结果。 #### 三、HQL 查询优化 - **使用缓存**:为了提高性能,可以在应用程序中使用...
本篇文档将深入探讨Hibernate中的HQL(Hibernate Query Language),一种面向对象的查询语言,它提供了与SQL类似的语法,但更贴近于面向对象的思维模式,使得开发者可以更加便捷地进行数据查询。 一、HQL简介 HQL是...
如果某条记录在另一个表中没有匹配,则不会显示这条记录。 2. **外连接(Outer Join)**: - **左外连接(Left Outer Join)**:除了返回两个表中满足连接条件的记录外,还会返回左表中不满足连接条件但右表中不...
这需要在`Student`类中提供一个对应的构造函数来接收这些属性。 5. 查询链接: HQL支持SQL的连接查询,包括内连接、左外连接、右外连接和全连接(不常用)。例如,使用内连接: ```java select a.id, b.id from A a...
在Java世界中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本篇将详细探讨Hibernate的注解方式以及HQL(Hibernate Query Language)查询...
在上面的示例中,我们首先通过`HibernateUtil.getSession()`方法获取到一个`Session`实例,然后定义了一个HQL查询语句,该语句用于从`Admin`表中查询`aname`为`name`的所有记录。最后通过`createQuery`方法创建查询...
HQL的全称是? 和SQL相比,HQL有哪些特点? HQL语句为:select jd.jdid,jd.jd from TblJd jd。怎样获得并显示查询结果? 使用'?'做占位符的参数查询,怎样设置参数的值? 命名参数查询的语法是? 怎样创建Criteria...
对hibernate的hql进行了详尽的讲解
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了数据库操作。本教程将深入探讨Hibernate中的两种查询方式:HQL(Hibernate Query ...
例如,假设我们有一个`Student`类,包含`name`和`age`属性,一个简单的HQL查询可能如下: ```sql SELECT s FROM Student s WHERE s.age > 18 ``` 这个查询会返回所有年龄大于18岁的学生对象。 **2. HQL的SELECT...
在本文档中所涉及的示例基于一个名为`joblog`的数据库,其中包含三个表:`student`(学生表)、`course`(课程表)和`sc`(选课表)。 - **学生表(student)**: - 字段包括:`id`(主键)、`sno`(学号)、`...