- Hibernate 多对多的映射关系(many-to-many)
- 我首先使用了学生表和图书表并产生了学生图书表(mysql数据库)
- 学生表:(学生占主动 所以在学生的集合中设置inverse=flase 在多对多的关系中inverse=flase是谁占
- 主动但在一对多的关系中inverse=true占主动)
- CREATE TABLE `stu` (
- `sid` int(11) NOT NULL auto_increment,
- `sname` varchar(50) default NULL,
- PRIMARY KEY (`sid`)
- ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
- Stu Bean:
- private Integer sid;
- private String sname;
- private Set book=new HashSet();
- public Set getBook() {
- return book;
- }
- public void setBook(Set book) {
- this.book = book;
- }
- public Stu() {
- }
- public Stu(String sname) {
- this.sname = sname;
- }
- public Integer getSid() {
- return this.sid;
- }
- public void setSid(Integer sid) {
- this.sid = sid;
- }
- public String getSname() {
- return this.sname;
- }
- public void setSname(String sname) {
- this.sname = sname;
- }
- Stu.hbm.xml:
- <hibernate-mapping>
- <class name="com.vo.Stu" table="stu">
- <id name="sid" type="java.lang.Integer">
- <column name="sid" />
- <generator class="native" />
- </id>
- <property name="sname" type="java.lang.String">
- <column name="sname" length="50" />
- </property>
- <set name="book" table="s_book" cascade="save-update" >
- <key column="sid"/>
- <many-to-many column="bid" class="com.vo.Book"></many-to-many>
- </set>
- </class>
- </hibernate-mapping>
- 图书表:
- CREATE TABLE `book` (
- `bid` int(11) NOT NULL auto_increment,
- `bname` varchar(50) default NULL,
- `bprice` varchar(50) default NULL,
- PRIMARY KEY (`bid`)
- ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
- BookBean:
- private Integer bid;
- private String bname;
- private String bprice;
- private Set stu=new HashSet();
- public Book() {
- }
- public Book(String bname, String bprice) {
- this.bname = bname;
- this.bprice = bprice;
- }
- public Integer getBid() {
- return this.bid;
- }
- public void setBid(Integer bid) {
- this.bid = bid;
- }
- public String getBname() {
- return this.bname;
- }
- public void setBname(String bname) {
- this.bname = bname;
- }
- public String getBprice() {
- return this.bprice;
- }
- public void setBprice(String bprice) {
- this.bprice = bprice;
- }
- public Set getStu() {
- return stu;
- }
- public void setStu(Set stu) {
- this.stu = stu;
- }
- Book.hbm.xml:
- <hibernate-mapping>
- <class name="com.vo.Book" table="book">
- <id name="bid" type="java.lang.Integer">
- <column name="bid" />
- <generator class="native" />
- </id>
- <property name="bname" type="java.lang.String">
- <column name="bname" length="50" />
- </property>
- <property name="bprice" type="java.lang.String">
- <column name="bprice" length="50" />
- </property>
- <set name="stu" table="s_book" cascade="save-update" inverse="false">
- <key column="bid"/>
- <many-to-many column="sid" class="com.vo.Stu"></many-to-many>
- </set>
- </class>
- </hibernate-mapping>
- 学生图书表:
- CREATE TABLE `s_book` (
- `sid` int(11) default NULL,
- `bid` int(11) default NULL
- ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
- 注意:
- 学生图书表不需要映射关系而且三张表之间也不需要在数据库中建立关系,直接在Hibernate中建立就可
- 以.
- Test.java:
- public class Test {
- SessionFactory sf;
- Session session;
- private Test()
- {
- try
- {
- Configuration cfg = new Configuration();
- sf = cfg.configure().buildSessionFactory();
- session = sf.openSession();
- }
- catch(HibernateException ex)
- {
- ex.printStackTrace();
- }
- }
- public void addMethod(Stu st)
- {
- Transaction t=null;
- t=session.beginTransaction();
- session.save(st);
- t.commit();
- }
- public static void main(String[] args) {
- Stu st=new Stu();
- st.setSname("zhang");
- Book book=new Book();
- book.setBname("is");
- book.setBprice("100");
- Book book2=new Book();
- book2.setBname("is1");
- book2.setBprice("102");
- Book book3=new Book();
- book3.setBname("is2");
- book3.setBprice("103");
- st.getBook().add(book);
- st.getBook().add(book2);
- st.getBook().add(book3);
- new Test().addMethod(st);
- }
- }