hibernate多对多关联单向实现实例。hibernate多对多关联映射,需要一中间表,Hibernate会自动生成中间表,Hibernate使用many-to-many标签来表示多对多的关联。多对多的关联映射,在实体类中,跟一对多一样,也是用集合来表示的。
hibernate多读点但相关联实现步骤:
建立POJO:User.java,Role.java,建立hibernate的配置文件,将两个hbm文件与其绑定
在User.java里面建立一个Set类型的属性,准备Role对象
代码实现:
User.java
public class User { private int id; private String name; private Set roles; |
Role.java
public class Role { private int id; private String name; |
User.hbm.xml
<hibernate-mapping> <class name=”User” table=”t_user”> <id name=”id”> <generator class=”native”/> </id> <property name=”name”/> <set name=”roles” table=”t_user_role”> <key column=”userid”/> <many-to-many class=”Role” column=”roleid”/> </set> </class> </hibernate-mapping> |
Role.hbm.xml
<hibernate-mapping> <class name=”Role” table=”t_role”> <id name=”id”> <generator class=”native”/> </id> <property name=”name”/> </class> </hibernate-mapping> |
测试类:
public class Many2Many extends TestCase { public void testSave() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); Role r1 = new Role(); r1.setName(“数据录入人员”); session.save(r1); Role r2 = new Role(); r2.setName(“商务主管”); session.save(r2); Role r3 = new Role(); r3.setName(“大区经理”); session.save(r3); User u1 = new User(); u1.setName(“张三”); Set u1Roles = new HashSet(); u1Roles.add(r1); u1Roles.add(r2); u1.setRoles(u1Roles); User u2 = new User(); u2.setName(“李四”); Set u2Roles = new HashSet(); u2Roles.add(r2); u2Roles.add(r3); u2.setRoles(u2Roles); User u3 = new User(); u3.setName(“王五”); Set u3Roles = new HashSet(); u3Roles.add(r1); u3Roles.add(r2); u3Roles.add(r3); u3.setRoles(u3Roles); session.save(u1); session.save(u2); session.save(u3); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } }
public void testLoad() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); User user = (User)session.load(User.class, 1); System.out.println(user.getName()); for (Iterator iter=user.getRoles().iterator(); iter.hasNext();) { Role role = (Role)iter.next(); System.out.println(role.getName()); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } }
} |