@OneToMany(mappedBy = "category", cascade = CascadeType.ALL, fetch = FetchType.EAGER)@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, targetEntity = MCategory.class)
@JoinColumn(name = "category_id")
这是设置,能正常运行,当我getHibernateTemplate().find("select * from Book"); 多这一方的时候,会产生N条数据,应该就是一条数据才对啊,请问该如何设置,才能只出一条SQL语句!
@JoinColumn(name = "category_id")
这是设置,能正常运行,当我getHibernateTemplate().find("select * from Book"); 多这一方的时候,会产生N条数据,应该就是一条数据才对啊,请问该如何设置,才能只出一条SQL语句!
@JoinColumn(name = "category_id")
改成懒加载就好了fetch = FetchType.LAZY
“应该就是一条数据才对啊”怎么可能,这是啥语句,
所谓的N+1是在查询的时候发出了N+1条sql语句
1: 首先发出一条查询对象id列表的sql
N: 根据id列表到缓存中查询,如果缓存中不存在与之匹配的数据,那么会根据id发出相应的sql语句
* list和iterate的区别?
* list每次都会发出sql语句,list会向缓存中放入数据,而不利用缓存中的数据
* iterate:在默认情况下iterate利用缓存数据,但如果缓存中不存在数据有可以能出现N+1问题
<class name="Classes" table="t_classes" batch-size="3">如果有10+1条语句 就吧batch-size="3"的值设为10 就可以了
祝你 成功