hibernate学习6之many-to-many单向关联
2017-04-10 17:55
357 查看
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_many2many</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">bjsxt</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.show_sql">true</property> <mapping resource="com/bjsxt/hibernate/User.hbm.xml"/> <mapping resource="com/bjsxt/hibernate/Role.hbm.xml"/> </session-factory> </hibernate-configuration>
public class Role { private int id; private String name; //setter,getter }
import java.util.Set; public class User { private int id; private String name; private Set roles; //一个用户有多个角色 //setter,getter }
Role.hbm.xml:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.bjsxt.hibernate.Role" table="t_role"> <id name="id"> <generator class="native"/> </id> <property name="name"/> </class> </hibernate-mapping>
User.hbm.xml:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.bjsxt.hibernate.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="com.bjsxt.hibernate.Role" column="roleid"/> </set> </class> </hibernate-mapping>
上面的配置要注意:t_user_role是生成的第三方表,它同时维护着User表和Role表的关系。
它是通过2个字段(column="userid"和column="roleid")维护着User表和Role表的关系。
测试一下:
import java.util.HashSet; import java.util.Iterator; import java.util.Set; import org.hibernate.Session; import junit.framework.TestCase; public class Many2Many extends TestCase { public void testSave2() { 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("10"); 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 testLoad1() { 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); } } }
相关文章推荐
- [Hibernate]基于xml和annotation的many-to-many单向关联【学习笔记】
- hibernate学习4之one-to-many单向关联(不推荐)
- Hibernate 之many-to-one 单向多对一关联示例
- Hibernate之多对多单向关联(ManyToMany)
- hibernate单向多对一关联映射(many-to-one)XML与注解版
- Hibernate学习总结:OneToOne单向主键关联
- Hibernate关系映射(六)多对多单向关联@ManyToMany Annotation方式
- Hibernate之一对多单向外键关联(OneToMany)
- hibernate学习3之one-to-one单向外键关联
- hibernate @OneToMany @ManyToOne 单向关联实体类非主键属性(以及包含多个属性关联)
- [Hibernate]基于xml和annotation的many-to-many双向关联【学习笔记】
- hibernate 多对一(Many-to-one)单向关联
- Hibernate多对多单向关联(一个many-to-many)
- Hibernate单向一对多关联(Unidirectional One-To-Many)要点
- hibernate单向一对多关联映射(one-to-many)XML与注解版
- hibernate学习5之one-to-many双向关联
- hibernate学习5之one-to-many双向关联
- Hibernate关系映射(四)一对多单向关联@OneToMany Annotation方式
- 【Hibernate学习笔记-6.1】无连接表的N-1关联(单向)
- hibernate注解版关联映射Many-to-One/Many-to-Many等&异常处理