hibernate 查询问题

扯远了 2014-04-18 02:48:52

就是我有一张表
在eclipse中加入了hibernate 想通过hibernate 查询出 数据
我在本地运行的sql 是select province,city from code where province = '湖南省' group by city;
能够查询出

Code.java
package com.test.hibernate;

import javax.persistence.Entity;
import javax.persistence.Id;


@Entity
public class Code {

private int id;
private String province;
private String city;
private String county;
private int postcode;

@Id
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCounty() {
return county;
}
public void setCounty(String county) {
this.county = county;
}
public int getPostcode() {
return postcode;
}
public void setPostcode(int postcode) {
this.postcode = postcode;
}

}


hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/code</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>

<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>

<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>

<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>

<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>

<!--
<mapping resource="com/test/hibernate/Code.hbm.xml"/>
-->
<mapping class="com.test.hibernate.Code"/>

</session-factory>

</hibernate-configuration>


Test.java
package com.test.hibernate;

import java.util.List;

import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class Test {
public static void main(String[] args) {

Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.buildServiceRegistry();
SessionFactory sessionFactory = configuration
.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
//String hql = "select c.province,c.city from Code c where c.province='湖南省'";
String hql2 = "select province,city from code where province = '湖南省' group by city";
SQLQuery query = session.createSQLQuery(hql);
List<Object[]> result = (List<Object[]>)query.list();
System.out.println("---result------>"+result);
session.beginTransaction();
session.getTransaction().commit();
session.close();

}
}


怎么查询的结果都是空,下面是打印的结果
Hibernate: select c.province,c.city from Code c where c.province='湖南省'
---result------>[]

我就是想查询出 比如:湖南省下的市,就像我本地查询语句 select province,city from code where province = '湖南省' group by city;得到的结果
...全文
282 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
别闹腰不好 2014-04-18
  • 打赏
  • 举报
回复
自己找个文档看看hql语句怎么写 ,10分钟就会了 。 看看嵌套查询
扯远了 2014-04-18
  • 打赏
  • 举报
回复
引用 4 楼 java_liuhao 的回复:
应该是编码问题,在hibernate中对数据库查询时‘湖南省’变成乱码所以查询不出数据
亲这个是在哪里设置呢?
扯远了 2014-04-18
  • 打赏
  • 举报
回复
引用 3 楼 anchor1 的回复:
应该是编码问题,最好都使用utf8
Mysql中的字符集我都是设置成utf8d的 就是不知道hibernate查询语句是不是也要在哪里定义字符集
扯远了 2014-04-18
  • 打赏
  • 举报
回复
引用 2 楼 u012463264 的回复:
你的 String hql2 = "select province,city from code where province = '湖南省' group by city"; 这个sql 能运行吗 我觉得这个sql有错误。 你程序运行时候//String hql = "select c.province,c.city from Code c where c.province='湖南省'"; 这个也注释了吗
这两个我都试过,都查询不出数据的
java_liuhao 2014-04-18
  • 打赏
  • 举报
回复
应该是编码问题,在hibernate中对数据库查询时‘湖南省’变成乱码所以查询不出数据
聪头 2014-04-18
  • 打赏
  • 举报
回复
应该是编码问题,最好都使用utf8
别闹腰不好 2014-04-18
  • 打赏
  • 举报
回复
你的 String hql2 = "select province,city from code where province = '湖南省' group by city"; 这个sql 能运行吗 我觉得这个sql有错误。 你程序运行时候//String hql = "select c.province,c.city from Code c where c.province='湖南省'"; 这个也注释了吗
别闹腰不好 2014-04-18
  • 打赏
  • 举报
回复
List<Map<String ,String>> result = query.list();
扯远了 2014-04-18
  • 打赏
  • 举报
回复
引用 8 楼 u012463264 的回复:
自己找个文档看看hql语句怎么写 ,10分钟就会了 。 看看嵌套查询
这里还是有个字符集的问题 where 后面的条件我改成 查询id 的话 就能够查询出来 where后面我查询的是中文 比如‘北京市’ 就查询不出来 这个该怎么解决呢?
扯远了 2014-04-18
  • 打赏
  • 举报
回复
引用 14 楼 u012463264 的回复:
[quote=引用 12 楼 u012278060 的回复:] [quote=引用 9 楼 u012463264 的回复:] 用这个 别强转 List<Map<String ,String>> result = query.list(); sql 用这个 查 : "select * from code 我觉的和乱码没毛关系
这个强不强转都是有数据的,但是出来的是 [[Ljava.lang.Object;@11f6c99, [Ljava.lang.Object;@12b36f, [Ljava.lang.Object;@1c26681, [Ljava.lang.Object;@1d7c4fb, [Ljava.lang.Object;@c5793b, [Ljava.lang.Object;@9a33c3, [Ljava.lang.Object;@1bc4784, [Ljava.lang.Object;@1fb3120, 是不是强转类型不对呢 [/quote] 你那强转根本就不对,[/quote] 为什么我加where语句就查询不到数据呢?
String province = "北京市";
		String hql = "select new List(c.province as province,c.city as city) from Code c where c.province =:province ";
		Query q = (Query) session.createQuery(hql);
		//q.setString("province", province);
		q.setEntity(0, province);
		List<Object[]> result = q.list();
		System.out.println("---result------>"+result);
还是我的where语句写错了呢?
别闹腰不好 2014-04-18
  • 打赏
  • 举报
回复
引用 17 楼 u012278060 的回复:
for(Object[] o: result){ for(Object obj : o){ System.out.println(obj); } } 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 类型转换不对,我用个for循环就能打印出来 数据了 在此小鸟谢谢给位 我得继续去完成我的任务了谢谢给位
那你不打算结贴了吗
扯远了 2014-04-18
  • 打赏
  • 举报
回复
for(Object[] o: result){ for(Object obj : o){ System.out.println(obj); } } 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 北京市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 天津市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 河北省 石家庄市 类型转换不对,我用个for循环就能打印出来 数据了 在此小鸟谢谢给位 我得继续去完成我的任务了谢谢给位
学到了吗 2014-04-18
  • 打赏
  • 举报
回复
查询为什么加事务
新时代智者 2014-04-18
  • 打赏
  • 举报
回复
你的sql语句写错了,要拼接~~ 那样些sql语句肯定是错的
别闹腰不好 2014-04-18
  • 打赏
  • 举报
回复
引用 12 楼 u012278060 的回复:
[quote=引用 9 楼 u012463264 的回复:] 用这个 别强转 List<Map<String ,String>> result = query.list(); sql 用这个 查 : "select * from code 我觉的和乱码没毛关系
这个强不强转都是有数据的,但是出来的是 [[Ljava.lang.Object;@11f6c99, [Ljava.lang.Object;@12b36f, [Ljava.lang.Object;@1c26681, [Ljava.lang.Object;@1d7c4fb, [Ljava.lang.Object;@c5793b, [Ljava.lang.Object;@9a33c3, [Ljava.lang.Object;@1bc4784, [Ljava.lang.Object;@1fb3120, 是不是强转类型不对呢 [/quote] 你那强转根本就不对,
扯远了 2014-04-18
  • 打赏
  • 举报
回复
引用 10 楼 rui888 的回复:
String hql2 = "select province,city from code "; 先查所有看看有没有问题。
你这个也能查询出数据来 也是类型不对,估计是强转类型不对
扯远了 2014-04-18
  • 打赏
  • 举报
回复
引用 9 楼 u012463264 的回复:
用这个 别强转 List<Map<String ,String>> result = query.list(); sql 用这个 查 : "select * from code 我觉的和乱码没毛关系
这个强不强转都是有数据的,但是出来的是 [[Ljava.lang.Object;@11f6c99, [Ljava.lang.Object;@12b36f, [Ljava.lang.Object;@1c26681, [Ljava.lang.Object;@1d7c4fb, [Ljava.lang.Object;@c5793b, [Ljava.lang.Object;@9a33c3, [Ljava.lang.Object;@1bc4784, [Ljava.lang.Object;@1fb3120, 是不是强转类型不对呢
tony4geek 2014-04-18
  • 打赏
  • 举报
回复
String hql2 = "select province,city from code "; 先查所有看看有没有问题。
别闹腰不好 2014-04-18
  • 打赏
  • 举报
回复
用这个 别强转 List<Map<String ,String>> result = query.list(); sql 用这个 查 : "select * from code 我觉的和乱码没毛关系

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧