hibernate(多对多)

多对多:
老师和学生,一个老师可以教多个学生,一个学生可以被多个老师教。

Book.java

package entity;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
public class Book implements Serializable {
 private static final long serialVersionUID = -4507633746397878138L;
 private Integer bookId;
 private String bookName;
 private Float price;
 private Integer[] categoryIds = new Integer[] {};
 public Integer[] getCategoryIds() {
  return categoryIds;
 }
 public void setCategoryIds(Integer[] categoryIds) {
  this.categoryIds = categoryIds;
 }
 private Set<Category> categoryies = new HashSet<Category>();
 public Set<Category> getCategoryies() {
  return categoryies;
 }
 public void setCategoryies(Set<Category> categoryies) {
  this.categoryies = categoryies;
 }
 public Book(Integer bookId, String bookName) {
  super();
  this.bookId = bookId;
  this.bookName = bookName;
 }
 public Integer getBookId() {
  return bookId;
 }
 public void setBookId(Integer bookId) {
  this.bookId = bookId;
 }
 public String getBookName() {
  return bookName;
 }
 public void setBookName(String bookName) {
  this.bookName = bookName;
 }
 public Float getPrice() {
  return price;
 }
 public void setPrice(Float price) {
  this.price = price;
 }
 public Book() {
  super();
 }
 @Override
 public String toString() {
  return "Book [bookId=" + bookId + ", bookName=" + bookName + ", price=" + price + "]";
 }
}

多对多关系注意事项:
1.一定要定义一个主控方
2.关联关系编辑,不需要直接操作桥接表,hibernate的主控方会自动维护
Book.hbm.xml(非主控方)

<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
 <class name="entity.Book" table="t_book">
  <id name="bookId" column="book_id" type="integer">
   <generator class="native"></generator>
  </id>
  <property name="bookName" column="book_name" type="string"></property>
  <property name="price" column="price" type="java.lang.Float"></property>
 <set name="categoryies" table="t_book_category" inverse="true" cascade="save-update">
  <!-- one -->
  <key column="bid"></key>
  <!-- many -->
  <many-to-many class="entity.Category" column="cid"/>
 </set>
 </class>
</hibernate-mapping>

Category.java

package entity;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
public class Category implements Serializable {
 private static final long serialVersionUID = -1071596622026998554L;
 private Integer categoryId;
 private String categoryName;
 private Set<Book> books = new HashSet<Book>();
 private boolean userCache;
 public boolean isUserCache() {
  return userCache;
 }
 public void setUserCache(boolean userCache) {
  this.userCache = userCache;
 }
 public Set<Book> getBooks() {
  return books;
 }
 public void setBooks(Set<Book> books) {
  this.books = books;
 }
 public Category() {
  super();
 }
 public Integer getCategoryId() {
  return categoryId;
 }
 public void setCategoryId(Integer categoryId) {
  this.categoryId = categoryId;
 }
 public String getCategoryName() {
  return categoryName;
 }
 public void setCategoryName(String categoryName) {
  this.categoryName = categoryName;
 }
 @Override
 public String toString() {
  return "Category [categoryId=" + categoryId + ", categoryName=" + categoryName + "]";
 }
}

Category.hbm.xml(主控方)

<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
 <class name="entity.Category" table="t_category">
 <cache usage="read-only"/>
  <id name="categoryId" column="category_id" type="integer">
   <generator class="native"></generator>
  </id>
  <property name="categoryName" column="category_name" type="string"></property>
 <!-- inverse="false" 主控方 -->
 <set name="books" table="t_book_category" inverse="false" cascade="save-update">
  <!-- one -->
  <key column="cid"></key>
  <!-- many -->
  <many-to-many class="entity.Book" column="bid"/>
 </set>
 </class>
</hibernate-mapping>

测试:

package dao;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import entity.Book;
import entity.Category;
import utils.PageBean;
public class BookDAOTest {
 private BookDAO bookDAO;
 private Book book;
 private Category category;
 private CategoryDAO categoryDAO;
 private PageBean pageBean;
 @Before
 public void setUp() throws Exception {
  bookDAO = new BookDAO();
  book = new Book();
  category = new Category();
  categoryDAO = new CategoryDAO();
  pageBean = new PageBean();
 }
 @Test
 public void testAdd() {
  book.setBookName("云");
  book.setPrice(250f);
  book.setCategoryIds(new Integer[] {1,3});
  bookDAO.add(book);
 }

在核心配置文件中引入映射文件

<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
 <class name="entity.User" table="t_user">
  <id name="id" column="id" type="java.lang.Integer">
   <generator class="increment"></generator>
  </id>
  <version name="version" type="java.lang.Integer"></version>
  <property name="userName" column="user_name" type="java.lang.String"></property>
  <property name="userPwd" column="user_pwd" type="java.lang.String"></property>
  <property name="realName" column="real_name" type="java.lang.String"></property>
  <property name="sex" column="sex" type="java.lang.String"></property>
  <property name="birthday" column="birthday" type="java.sql.Date"></property>
  <property insert="false" update="false" name="createDatetime" column="create_datetime" type="java.sql.Timestamp"></property>
  <property name="remark" column="remark" type="java.lang.String"></property>
 </class>
</hibernate-mapping>

删除注意:
被控方先通过主控方解除多对多关系,再删除被控方

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值