fetch属性默认值是FetchType.EAGER
Criteria c=session.createCriteria(Student.class).setFetchMode("address", FetchMode.JOIN);你是去找Student
你把Student找到了 ok,但是每个Student有个Address属性,这个会自动去加载Address里面的Student,所以出现了N+1
Criteria c=session.createCriteria(Student.class).setFetchMode("address", FetchMode.JOIN);你是去找Student
你把Student找到了 ok,但是每个Student有个Address属性,这个会自动去加载Address里面的Student,所以出现了N+1
解决方案 »
- 大家好,我的程序log4j打不出日志报这个错是什么原因哦,我查不出来哦,帮帮忙啊
- 关于客户端识别,大家进来看下~~
- Ajax封装xml数据在struts的action得不到
- Hibernate缓存问题
- 如何使用xslt把2个xml文件transform,生成1个xml ?
- 本人毕业论文想做一个搜索引擎,有几个难题向高手请教!200分不够再给
- 关于tomcat下servlet的配置和运行,求解!!!
- JavaBean有什么神奇的,哼!!!!!!!!!!
- JDBC如何在一个数据库中新建一张表?
- 有关Session Bean的问题!
- java中sql查询语句格式求助
- 1000块钱买个投票器的源码,要求能过验证码,实现动态ip,过mac
hibernate版本是:4.3.5,最新版本。
我是因为想查出所有记录并导出到excel,所以设置 立即查询。 如果延迟加载,会造成一样的效果:sql语句过多导致查询时间过长。1000条记录就会再去延迟加载1000次,发出1000条sql语句。
谁说hibernate3版本后自动延迟加载的,JPA的标准,以及JPA注解的源码,只有@OneToMany和@ManyToMany的fetch默认才是延迟加载,@OneToOne和@OneToMany的fetch默认是EAGER
谁说hibernate3版本后自动延迟加载的,JPA的标准,以及JPA注解的源码,只有@OneToMany和@ManyToMany的fetch默认才是延迟加载,@OneToOne和@OneToMany的fetch默认是EAGER我试过了,不加fetch=lazy,它也是延迟加载的。
ok,现在我全部手动写上fetch=lazy,但是因为我想查出全部数据,所以查询时我用了fetch=join,但是依旧是这样,产生多个sql语句
hibernate版本是:4.3.5,最新版本。
我是因为想查出所有记录并导出到excel,所以设置 立即查询。 如果延迟加载,会造成一样的效果:sql语句过多导致查询时间过长。1000条记录就会再去延迟加载1000次,发出1000条sql语句。
Address方@onetoone设置LAZY,你只查询Student,就不会出现了N+1
hibernate版本是:4.3.5,最新版本。
我是因为想查出所有记录并导出到excel,所以设置 立即查询。 如果延迟加载,会造成一样的效果:sql语句过多导致查询时间过长。1000条记录就会再去延迟加载1000次,发出1000条sql语句。
Address方@onetoone设置LAZY,你只查询Student,就不会出现了N+1
你好,我的需求如下:查询所有student 的信息和对应的address信息,导入到excel。如果只查询student,到用到address的信息时,需要去加载。这样造成如果数据库中student条数多的话,延迟记载address的次数也多,发出的sql语句也多,查询时间就会很长了。所以我想用fetch=join,没想到它们还是发出1+n的sql语句。我尝试过单向的关联,的确有用,但是我不明白,双向关联就只能有1+n这种情况吗
hibernate版本是:4.3.5,最新版本。
我是因为想查出所有记录并导出到excel,所以设置 立即查询。 如果延迟加载,会造成一样的效果:sql语句过多导致查询时间过长。1000条记录就会再去延迟加载1000次,发出1000条sql语句。
Address方@onetoone设置LAZY,你只查询Student,就不会出现了N+1
你好,我的需求如下:查询所有student 的信息和对应的address信息,导入到excel。如果只查询student,到用到address的信息时,需要去加载。这样造成如果数据库中student条数多的话,延迟记载address的次数也多,发出的sql语句也多,查询时间就会很长了。所以我想用fetch=join,没想到它们还是发出1+n的sql语句。我尝试过单向的关联,的确有用,但是我不明白,双向关联就只能有1+n这种情况吗
双线关联也不会的,只要你不用到Address里面关联的Student属性,就不会,如果用到了,就会出现N+1
还有你可以这样写 from Student s left outer join fetch s.address 这样就把student关联的Address取出来了,你只要不用到Address里面关联的Student属性就行了,前提你把Addres那边的设置为LAZY
hibernate版本是:4.3.5,最新版本。
我是因为想查出所有记录并导出到excel,所以设置 立即查询。 如果延迟加载,会造成一样的效果:sql语句过多导致查询时间过长。1000条记录就会再去延迟加载1000次,发出1000条sql语句。
Address方@onetoone设置LAZY,你只查询Student,就不会出现了N+1
你好,我的需求如下:查询所有student 的信息和对应的address信息,导入到excel。如果只查询student,到用到address的信息时,需要去加载。这样造成如果数据库中student条数多的话,延迟记载address的次数也多,发出的sql语句也多,查询时间就会很长了。所以我想用fetch=join,没想到它们还是发出1+n的sql语句。我尝试过单向的关联,的确有用,但是我不明白,双向关联就只能有1+n这种情况吗
双线关联也不会的,只要你不用到Address里面关联的Student属性,就不会,如果用到了,就会出现N+1
还有你可以这样写 from Student s left outer join fetch s.address 这样就把student关联的Address取出来了,你只要不用到Address里面关联的Student属性就行了,前提你把Addres那边的设置为LAZY我已经照你说的做了,发现有一些改变,
第一条语句依旧在,第二条变成了
select student... from Student student where student.student_address=???
第二条不查询address了,但是还是出现第二条,出现1+n问题
hibernate版本是:4.3.5,最新版本。
我是因为想查出所有记录并导出到excel,所以设置 立即查询。 如果延迟加载,会造成一样的效果:sql语句过多导致查询时间过长。1000条记录就会再去延迟加载1000次,发出1000条sql语句。
Address方@onetoone设置LAZY,你只查询Student,就不会出现了N+1
你好,我的需求如下:查询所有student 的信息和对应的address信息,导入到excel。如果只查询student,到用到address的信息时,需要去加载。这样造成如果数据库中student条数多的话,延迟记载address的次数也多,发出的sql语句也多,查询时间就会很长了。所以我想用fetch=join,没想到它们还是发出1+n的sql语句。我尝试过单向的关联,的确有用,但是我不明白,双向关联就只能有1+n这种情况吗
双线关联也不会的,只要你不用到Address里面关联的Student属性,就不会,如果用到了,就会出现N+1
还有你可以这样写 from Student s left outer join fetch s.address 这样就把student关联的Address取出来了,你只要不用到Address里面关联的Student属性就行了,前提你把Addres那边的设置为LAZY我已经照你说的做了,发现有一些改变,
第一条语句依旧在,第二条变成了
select student... from Student student where student.student_address=???
第二条不查询address了,但是还是出现第二条,出现1+n问题
Address 那方的Student属性,你fechType设置LAZY了没?
顺便把你查询的代码贴出来,贴全点
hibernate版本是:4.3.5,最新版本。
我是因为想查出所有记录并导出到excel,所以设置 立即查询。 如果延迟加载,会造成一样的效果:sql语句过多导致查询时间过长。1000条记录就会再去延迟加载1000次,发出1000条sql语句。
Address方@onetoone设置LAZY,你只查询Student,就不会出现了N+1
你好,我的需求如下:查询所有student 的信息和对应的address信息,导入到excel。如果只查询student,到用到address的信息时,需要去加载。这样造成如果数据库中student条数多的话,延迟记载address的次数也多,发出的sql语句也多,查询时间就会很长了。所以我想用fetch=join,没想到它们还是发出1+n的sql语句。我尝试过单向的关联,的确有用,但是我不明白,双向关联就只能有1+n这种情况吗
双线关联也不会的,只要你不用到Address里面关联的Student属性,就不会,如果用到了,就会出现N+1
还有你可以这样写 from Student s left outer join fetch s.address 这样就把student关联的Address取出来了,你只要不用到Address里面关联的Student属性就行了,前提你把Addres那边的设置为LAZY我已经照你说的做了,发现有一些改变,
第一条语句依旧在,第二条变成了
select student... from Student student where student.student_address=???
第二条不查询address了,但是还是出现第二条,出现1+n问题
Address 那方的Student属性,你fechType设置LAZY了没?
顺便把你查询的代码贴出来,贴全点
@Entity
@Table(name = "ADDRESS")
public class Address implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="ADDRESS_ID")
private int addressId;
@Column(name = "ADDRESS_STREET")
private String street;
@Column(name = "ADDRESS_CITY")
private String city;
@Column(name = "ADDRESS_STATE")
private String state;
@Column(name = "ADDRESS_ZIPCODE")
private String zipcode;
@OneToOne(mappedBy="address",fetch=FetchType.LAZY)
private Student student;@Entity
@Table(name = "STUDENT")
public class Student implements java.io.Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="student_id")
private int studentId;
@Column(name = "STUDENT_NAME")
private String studentName;
@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name="student_address",referencedColumnName="ADDRESS_ID")
private Address address;查询语句如下
Query query=session.createQuery("from Student s left outer join fetch s.address ");
List<Student> students=query.list();
System.out.println("*****");打印出来的sql语句如下select student...,address... from Student student left outer join Address address on student.student_address=address.addressId,select student... from Student student where student.student_address=???
hibernate版本是:4.3.5,最新版本。
我是因为想查出所有记录并导出到excel,所以设置 立即查询。 如果延迟加载,会造成一样的效果:sql语句过多导致查询时间过长。1000条记录就会再去延迟加载1000次,发出1000条sql语句。
Address方@onetoone设置LAZY,你只查询Student,就不会出现了N+1
你好,我的需求如下:查询所有student 的信息和对应的address信息,导入到excel。如果只查询student,到用到address的信息时,需要去加载。这样造成如果数据库中student条数多的话,延迟记载address的次数也多,发出的sql语句也多,查询时间就会很长了。所以我想用fetch=join,没想到它们还是发出1+n的sql语句。我尝试过单向的关联,的确有用,但是我不明白,双向关联就只能有1+n这种情况吗
双线关联也不会的,只要你不用到Address里面关联的Student属性,就不会,如果用到了,就会出现N+1
还有你可以这样写 from Student s left outer join fetch s.address 这样就把student关联的Address取出来了,你只要不用到Address里面关联的Student属性就行了,前提你把Addres那边的设置为LAZY我已经照你说的做了,发现有一些改变,
第一条语句依旧在,第二条变成了
select student... from Student student where student.student_address=???
第二条不查询address了,但是还是出现第二条,出现1+n问题
Address 那方的Student属性,你fechType设置LAZY了没?
顺便把你查询的代码贴出来,贴全点我看了一下你的回答,你说只查student,不用address就不会出现N+1,但我要全部查出来啊,需要用address。
配置文件我是看到一对多代理一对一,jpa好像还是一对一