今天学了HIBERNATE的一对多的 关系,嗯它真的太好了,很方便 确实
就是这样一种思想:
新建一个User类 和 Group 类 如下:
private int id;
private String username;
private Group group;
private int id;
private String name;
Group.hbm.xml
hibernate-mapping>
<class name="hibernate.Group" table="t_group">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
User.hbm.xml
hibernate-mapping>
<class name="hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="username"/>
<many-to-one name="group" column="groupid" cascade="all"/>
</class>
</hibernate-mapping>
testSave
public void testSave1() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
Group group = new Group();
group.setName("试点班");
group.setId(1);
User user1 = new User();
user1.setUsername("***1");
user1.setGroup(group);
User user2 = new User();
user2.setUsername("***2");
user2.setGroup(group);
session.save(user1);
session.save(user2);
session.getTransaction().commit();
}catch(Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
}finally {
HibernateUtils.closeSession(session);
}
//直接查询
public void testLoad() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
User user = (User)session.load(User.class, 3);
System.out.println("user name= "+ user.getUsername());
System.out.println("group name = "+ user.getGroup().getName());
session.getTransaction().commit();
}catch(Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
}finally {
HibernateUtils.closeSession(session);
}
}
总估总结:
关建是一对多的关系 在User.hbm.xml 中用一个<many-to-one> 最关键了,在多的一端加上个这个标签
在save 里并没有保存 group 面直接存了user2 和user2 能成功,是因为 在 user.hbm.xm.中有一个 cascade="all"/ 属性,它有几个值 只对增 册 改 有用 级联关系,自动给存了,
取数据据时 直接可以取 user 然后直接可以用到 user 对应的group 的name ,很方便的