`
wuxuping
  • 浏览: 698 次
  • 性别: Icon_minigender_1
  • 来自: 舟山
文章分类
社区版块
存档分类
最新评论

困惑了几天的问题 为什么hibernate执行了相同的SQL语句

阅读更多
 
package cn.phping.one2one_fk_2;

public class Passport_fk_2 {
	private int id;
	private String serial;
	private int expiry;
	private Person_fk_2 person_fk_2 ;  
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getSerial() {
		return serial;
	}
	public void setSerial(String serial) {
		this.serial = serial;
	}
	public int getExpiry() {
		return expiry;
	}
	public void setExpiry(int expiry) {
		this.expiry = expiry;
	}
	public Person_fk_2 getPerson_fk_2() {
		return person_fk_2;
	}
	public void setPerson_fk_2(Person_fk_2 person_fk_2) {
		this.person_fk_2 = person_fk_2;
	}

}
package cn.phping.one2one_fk_2;

public class Person_fk_2 {
	private int id;
	private String name;
	private Passport_fk_2 passport_fk_2;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Passport_fk_2 getPassport_fk_2() {
		return passport_fk_2;
	}
	public void setPassport_fk_2(Passport_fk_2 passport_fk_2) {
		this.passport_fk_2 = passport_fk_2;
	}
	



}


<?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">

<hibernate-mapping >
<class name="cn.phping.one2one_fk_2.Passport_fk_2">
<id name="id">
  <generator class="native">
  </generator>
</id>
<property name="serial" />
<property name="expiry" />
<one-to-one name="person_fk_2" class="cn.phping.one2one_fk_2.Person_fk_2"
  property-ref="passport_fk_2"></one-to-one>
</class>
</hibernate-mapping>

<?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">

<hibernate-mapping>
<class name="cn.phping.one2one_fk_2.Person_fk_2">
      <id name="id">
      <generator class="native"></generator>
 </id>
<property name="name" type="java.lang.String"/>
<many-to-one name="passport_fk_2"
  unique="true"></many-to-one>
</class>
</hibernate-mapping>

以上是两个POJO类,以及两个映射文件,两者关系是基于唯一外键的一对一关系,然后我写了测试类 用junit测试
package cn.phping.one2one_fk_2;
import java.util.Iterator;
import java.util.List;

import junit.framework.TestCase;

import org.hibernate.Session;

import cn.phping.junit.HibernateUtils;
public class Testone2one_fk_2 extends TestCase {
	Session session = null;
	@Override
	protected void setUp() throws Exception {
		session = HibernateUtils.currentSession();
	}

	@Override
	protected void tearDown() throws Exception {
	      HibernateUtils.closeSession();
	}

	public void  testSaveone2one_fk_2() {
		session.beginTransaction();
		Person_fk_2 person_fk_2 = new Person_fk_2();
		person_fk_2.setName("wuxuping");
		Passport_fk_2 passport_fk_2  = new Passport_fk_2();
		passport_fk_2.setSerial("2203222222222");
		passport_fk_2.setExpiry(25);
		passport_fk_2.setPerson_fk_2(person_fk_2);
		session.save(passport_fk_2);
		session.getTransaction().commit();
		}
	
	public void testGetDatas(){
		session.beginTransaction();
		List list = session.createQuery("from Passport_fk_2 p ").list();
	
		
	}
	
}

当我测试testGetDatas()方法时,测试的结果如下,当我数据库里有5条Passport_fk_2 hibernate执行了5条相同的语句,当我有100条时,也就有100条相同的sql 。不知道为什么,不知道小弟那里设置有错误
请高手们帮帮我,小弟不胜感激!!!!
Hibernate: select passport_f0_.id as id8_, passport_f0_.serial as serial8_, passport_f0_.expiry as expiry8_ from Passport_fk_2 passport_f0_
Hibernate: select person_fk_0_.id as id9_0_, person_fk_0_.name as name9_0_, person_fk_0_.passport_fk_2 as passport3_9_0_ from Person_fk_2 person_fk_0_ where person_fk_0_.passport_fk_2=?
Hibernate: select person_fk_0_.id as id9_0_, person_fk_0_.name as name9_0_, person_fk_0_.passport_fk_2 as passport3_9_0_ from Person_fk_2 person_fk_0_ where person_fk_0_.passport_fk_2=?
Hibernate: select person_fk_0_.id as id9_0_, person_fk_0_.name as name9_0_, person_fk_0_.passport_fk_2 as passport3_9_0_ from Person_fk_2 person_fk_0_ where person_fk_0_.passport_fk_2=?
Hibernate: select person_fk_0_.id as id9_0_, person_fk_0_.name as name9_0_, person_fk_0_.passport_fk_2 as passport3_9_0_ from Person_fk_2 person_fk_0_ where person_fk_0_.passport_fk_2=?
Hibernate: select person_fk_0_.id as id9_0_, person_fk_0_.name as name9_0_, person_fk_0_.passport_fk_2 as passport3_9_0_ from Person_fk_2 person_fk_0_ where person_fk_0_.passport_fk_2=?
分享到:
评论
5 楼 movingboy 2008-04-25  
两个实体之间的关联配置有错,你仔细检查一下吧
4 楼 wuxuping 2008-04-25  
steven_652 写道
你开启lazy fetch功能了吗?

能说的具体点吗 可是别人的代码根本这样没问题啊
3 楼 steven_652 2008-04-25  
你开启lazy fetch功能了吗?
2 楼 wuxuping 2008-04-25  
可是我并没有添加参数啊 我只是想全部取出来
1 楼 movingboy 2008-04-25  
你没看到执行SQL语句末尾的问号吗?那是参数占位符,它会被实际的参数值替代。参数不同取得的结果也就不同了

相关推荐

    hibernate执行原生sql语句

    为什么需要执行原生 SQL 语句 在实际开发中,我们可能需要执行一些复杂的 SQL 查询,或者使用数据库特有的函数和语句,而这些操作在 HQL 中不支持。此时,我们需要使用原生 SQL 语句来实现这些操作。 使用 ...

    hibernate 执行原生sql的几种方式

    本篇文章将详细介绍在Hibernate中执行原生SQL的几种方式,以及它们各自的适用场景和优缺点。 1. **使用`Session.createSQLQuery()`** Hibernate的`Session`接口提供了`createSQLQuery()`方法,允许我们直接编写SQL...

    Hibernate中Sql语句

    #### 一、为什么要使用原生SQL? 虽然HQL是Hibernate提供的面向对象的语言,能够方便地映射到Java对象,但在某些场景下使用原生SQL更加灵活高效,例如: - **复杂查询**:当需要执行复杂的数据库操作时,如分组、...

    Hibernate调用配置文件中的sql语句

    本篇将深入探讨如何在Hibernate中调用配置文件中的SQL语句,以此提高代码的可维护性和灵活性。 首先,理解Hibernate的核心概念至关重要。Hibernate是一个对象关系映射(ORM)框架,它将Java对象与关系数据库中的...

    让hibernate输出sql语句参数配置.doc

    当设置为 true 时,Hibernate 将输出所有 SQL 语句到控制台,方便开发者调试和优化数据库操作。 3. hibernate.format_sql hibernate.format_sql 参数用于在 log 和 console 中打印出更漂亮的 SQL。其取值为 true ...

    Hibernate生产SQL语句

    模仿Hibernate生成SQL语句,我们可以从以下几个方面入手: 1. **实体类(Entity)与表映射**:Hibernate通过`@Entity`注解定义一个Java类为数据库中的表,`@Table`注解指定对应的表名。实体类的属性对应表中的列,`...

    hibernate执行外部sql

    标题“hibernate执行外部sql”指的是使用Hibernate框架执行存储在外部文件中的SQL语句。通常,Hibernate以其对象关系映射(ORM)能力著称,允许开发者通过Java对象来操作数据库,但有时我们仍需直接执行SQL,特别是...

    采用p6spy完整显示hibernate的SQL语句

    P6Spy是一个开源的JDBC代理库,它允许我们监控并记录应用通过JDBC执行的所有数据库操作,包括那些由Hibernate生成的SQL语句。它不仅可以提供完整的SQL语句,还能够提供执行时间、性能指标等详细信息,这对于优化...

    hibernate实现动态SQL查询

    本篇文章主要探讨如何利用Hibernate实现动态SQL查询,结合XML配置和FREEMARKER模板引擎来生成执行的SQL语句。 一、Hibernate简介 Hibernate作为一款强大的持久层框架,它简化了Java应用程序与数据库之间的交互。...

    hibernate显示不带?的完整sql

    这些配置会捕获Hibernate执行的SQL语句及其参数绑定,从而在控制台看到完整的、参数化的SQL。 在开发环境中,这样的配置非常有用,因为它能帮助我们理解查询行为,定位潜在的性能瓶颈,或者检查数据是否按照预期...

    使用p6spy完整显示hibernate的SQL语句

    4. **启用Hibernate SQL日志**:在Hibernate的配置中,你需要开启SQL语句的日志输出,通常是通过设置`hibernate.show_sql`和`hibernate.format_sql`属性为`true`。 5. **测试和分析**:一旦配置完成,运行你的应用...

    Java打印漂亮的SQL语句(被格式化的SQL语句)

    为了提高效率并使SQL语句更易于理解和分析,格式化SQL语句显得尤为重要。标题提及的"Java打印漂亮的SQL语句(被格式化的SQL语句)"就是一种解决方案,它利用特定的工具或库将原本杂乱无章的SQL转换为结构清晰、简洁易...

    hibernate将本地SQL查询结果封装成对象

    当我们需要执行一些特殊的、复杂的或者非标准的SQL查询时, Hibernate的本地SQL查询功能就显得尤为实用。本文将深入探讨如何使用Hibernate将本地SQL查询的结果封装成对象。 首先,本地SQL查询(Native SQL)是指...

    Hibernate使用xdoclet生成映射文件和sql语句

    XDoclet是早期的一个工具,用于自动生成Hibernate的映射文件(.hbm.xml)和SQL语句,这样开发者无需手动编写这些文件,提高了开发效率。这篇博客文章“Hibernate使用xdoclet生成映射文件和sql语句”可能详细介绍了...

    Hibernate在Myeclipse下SQL语句演示

    4. **调试与日志**: 可以开启Hibernate的SQL日志,观察实际执行的SQL语句,帮助调试和优化查询。 综上所述,通过Myeclipse和Hibernate的结合,开发者可以高效地进行数据库操作,无需关心底层SQL细节,专注于业务...

    spring_Framework+经典SQL语句大全+Hibernate中文API

    4. 示例代码或项目:可能包含了一些使用Spring和Hibernate的示例程序,展示如何在实际开发中整合这两个框架,以及如何编写和执行SQL语句。 学习并掌握Spring Framework、经典SQL语句和Hibernate,对于Java开发人员...

    java操作mysql数据库,不写sql语句版

    在Java编程中,与MySQL数据库交互通常涉及到使用SQL语句来执行CRUD(创建、读取、更新、删除)操作。然而,为了提高代码的可维护性和安全性,开发者可以选择使用ORM(对象关系映射)框架,如Hibernate或MyBatis,...

    hibernate将本地SQL查询结果封装成对象(最终)

    使用本地sql语句查询后,无需再使用Object对查询结果进行强制转换,而是直接将查询结果放到实体Bean里了。 PS: 其实只有一版,这里只所以叫最终版是因为该附件我上传了好几天传不上去,到最后报告说‘资源已经存在...

    Struts 1.1、Hibernate 3.0和SQL Server 2005数据库驱动包

    SQL Server 2005的JDBC驱动程序(sqljdbc.jar)允许Java应用程序连接到SQL Server数据库,执行SQL语句,以及管理数据库连接。 在提供的压缩包中,"jakarta-struts-1%5B1%5D.1-src.rar"包含了Struts 1.1的源代码,这...

Global site tag (gtag.js) - Google Analytics