1.数据库
学生选择课
CREATETABLE stud(
id INT PRIMARY KEY,
NAME VARCHAR(30)
);
CREATETABLE course(
id INT PRIMARY KEY,
NAME VARCHAR(30)
);
CREATETABLE sc(
sid INT,
cid INT,
CONSTRAINT PRIMARY KEY(sid,cid),
CONSTRAINT FOREIGN KEY(sid) REFERENCESstud(id),
CONSTRAINT FOREIGN KEY(cid) REFERENCEScourse(id)
);
2.注解的bean
package czb.domain;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name= "stud")
@GenericGenerator(name = "inc",strategy = "increment")
public class Stud {
@Id
@Column
@GeneratedValue(generator = "inc")
private Integer id;
@Column
private String name;
@ManyToMany
@Cascade(value = CascadeType.SAVE_UPDATE)
// 指定中间表
@JoinTable(name = "sc", joinColumns = @JoinColumn(name = "sid"),
inverseJoinColumns = @JoinColumn(name = "cid"))
private List<Course> courses=newArrayList<Course>();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Course>getCourses() {
return courses;
}
public voidsetCourses(List<Course> courses) {
this.courses = courses;
}
@Override
public String toString() {
return "Stud [id="+ id + ", name="+ name+ ", courses=" + courses
+"]";
}
}
2.2.类Course
@Entity
@Table(name="course")
@GenericGenerator(name="inc",strategy="increment")
public class Course {
@Id
@Column
@GeneratedValue(generator="inc")
private Integer id;
@Column
private String name;
@ManyToMany
//指定中间表
@JoinTable(name="sc",joinColumns=@JoinColumn(name="cid"),
inverseJoinColumns=@JoinColumn(name="sid"))
private List<Stud> studs = newArrayList<Stud>();
3.hibernate.cfg.xml
<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/HibernateConfiguration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory >
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">1234</property>
<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/hibernate?characterEncoding=UTF-8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 配置C3p0的链接 -->
<property name="hibernate.c3p0.max_size">3</property>
<property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.acquire_increment">2</property>
<property name="hibernate.c3p0.timeout">3000</property>
<property name="hibernate.c3p0.idle_test_period">2000</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.connection.provider_class">org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider</property>
<property name="current_session_context_class">thread</property>
<property name="show_sql">true</property>
<!-- 配置*.hbm.xml文件 -->
<!-- <mapping resource="czb/domain/Person.hbm.xml"/>
<mapping resource="czb/domain/Stud.hbm.xml"/>-->
<mapping class="czb.domain.Stud"/>
<mapping class="czb.domain.Course"/>
</session-factory>
</hibernate-configuration>
4.测试
public classManyToMany {
@Test
publicvoidsave(){
Session s = openSession();
s.beginTransaction();
Stud stud = new Stud();
stud.setName("李四2");
Course course = new Course();
course.setName("英语2");
stud.getCourses().add(course);
s.save(stud);
s.getTransaction().commit();
}
@Test
publicvoidquery(){
Session s = openSession();
Query query = s.createQuery("select new map(s.name as sname ,c.name as cname)from Stud s join s.courses c order by s.name");
List list = query.list();
System.err.println(list);
}
}