1.
// /*不再:user.setGroup(group);*/
// //需要对User的group做如下设置
// //@ManyToOne(cascade={CascadeType.ALL})
// //cascade={CascadeType.ALL})可以把user关联的transparent对象:group保存进入
2.
/*在获取多方的时候,是否获得1方的数据,答案是肯定的
*一般我们获得一个用户的时候都会想得到它的组
**/
// /*@ManyToOne(cascade={CascadeType.ALL})
// * ManyToOne 无论你是否设置cascade={CascadeType.ALL}
// * 它默认都会帮你把1的那方取出来
// * */
/*在获取1方的时候,是否获得多方的数据,答案是否定的
*一般我们获取一个组的信息时不会获得这个组的所有用户的信息出来
**/
//测试get
Session session2=HibernateSessionFactory.getSession();
Transaction transaction2=session2.beginTransaction();
//默认不取多方的数据
Group g=(Group)session2.get(Group.class, 1);
//当加上了fetch=FetchType.EAGER后,会取多方(user)的数据
transaction2.commit();
session2.close();
@OneToMany(mappedBy="group",cascade={CascadeType.ALL},fetch=FetchType.EAGER)
//cascade只对del,update,create有效
//对于获取,用fetch
3.
@OneToMany(
mappedBy = "group"
, cascade = { CascadeType.ALL }
, fetch = FetchType.LAZY//默认值
)
//cascade只对del,update,create有效
//对于获取,用fetch
4.
@Entity
@Table(name="tb_user")
public class User implements Serializable{
private int id;
private String name;
private Group group;
@ManyToOne(
cascade={CascadeType.ALL}
,fetch=FetchType.LAZY
)
public Group getGroup() {
return group;
}
当从多方获得一方的数据时,默认是FetchType.EAGER
当从一方获得多方的数据时,默认是FetchType.LAZY
其实这是比较符合现实情况的
如上情况:
fetch=FetchType.LAZY
则SQL:
Hibernate:
select
user0_.id as id1_0_,
user0_.group_id as group3_1_0_,
user0_.name as name1_0_
from
tb_user user0_
where
user0_.id=?
fetch=FetchType.EAGER
则SQL:
Hibernate:
select
user0_.id as id1_1_,
user0_.group_id as group3_1_1_,
user0_.name as name1_1_,
group1_.id as id0_0_,
group1_.name as name0_0_
from
tb_user user0_
left outer join
tb_group group1_
on user0_.group_id=group1_.id
where
user0_.id=?
5.
当获得的数据需要排序才选择list,一般都是set
6.