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.