com.my..."> com.my..." /> com.my..." />
用户登录
用户注册

分享至

hibernate4 多对多注解

  • 作者: 举吊问天谁要吹
  • 来源: 51数据库
  • 2020-10-06
首先是在hibernate.cfg.xml中引入要映射的class


"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">


com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GBK
root
sa
org.hibernate.dialect.MySQLDialect
true
update







我们分别看看reader.java和book.java文件

Reader.java

package com.sszd.hibernate;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="reader")
public class Reader {

@Id
@Column(name="ID")
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

@Column(name="MENO")
private String meno;

@Column(name="NAME")
private String name;

@OneToMany(mappedBy = "reader", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Set books = new HashSet();

public Reader()
{

}

public Set getBooks() {
return books;
}

public void setBooks(Set books) {
this.books = books;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getMeno() {
return meno;
}

public void setMeno(String meno) {
this.meno = meno;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

book.java

package com.sszd.hibernate;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name="book")
public class Book {

@Id
@Column(name="ID")
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

@Column(name="TITLE")
private String title;

@ManyToOne(cascade = CascadeType.ALL, optional = false)
@JoinColumn(name="rea_id", referencedColumnName="id")//外键为sut_id,与student中的id关联
private Reader reader;

public int getId() {
return id;
}

public Reader getReader() {
return reader;
}

public void setReader(Reader reader) {
this.reader = reader;
}

public void setId(int id) {
this.id = id;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

}

接下来是我们的本地测试用例

package com.sszd.main;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import com.sszd.hibernate.Book;
import com.sszd.hibernate.Reader;
public class ReaderToBooks {

private static SessionFactory sessionFactory;

public static void main(String[] args) {

sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();

Session session = sessionFactory.openSession();

Reader r = new Reader();

r.setName("Reader zhang");

Book b1 = new Book();

b1.setTitle("title1");

Book b2 = new Book();

b2.setTitle("title2");

b1.setReader(r);
b2.setReader(r);
r.getBooks().add(b1);
r.getBooks().add(b2);

Transaction trx = session.beginTransaction();

session.save(r);

trx.commit();

session.close();

}

}




  我给你写一个user和role的多对多
这时user类
private?List?roleList?=?Lists.newArrayList();
……省略
@ManyToMany(mappedBy?=?"userList",?fetch?=?FetchType.LAZY)
@OrderBy("id?ASC")
public?List?getRoleList()?{
return?roleList;
}

这时role类
private?List?userList?=?Lists.newArrayList();

@ManyToMany(fetch?=?FetchType.LAZY)
@JoinTable(name?=?"tr_user_role",?joinColumns?=?{?@JoinColumn(name?=?"role_id")?},?inverseJoinColumns?=?{?@JoinColumn(name?=?"user_id")?})
@OrderBy("id?ASC")
public?List?getUserList()?{
return?userList;
}你进行对应的替换就行了,我设置的role是主控方

表结构就不写了,共3个表,你应该会




  

在student类和teacher类中,它们应该生成的都是和中间表有关的set集合吧,把它删掉,然后再各个类中配上对方的set集合.还有你生成的多对多影射关系,怎么是list而不是set。

如果你觉得答案合理,请点击采纳,举手之劳,能激励我继续为别人答题,谢谢

详情qq:455423467

软件
前端设计
程序设计
Java相关