Hibernate 多对多的映射关系(many-to-many)
2008-10-15 08:58
513 查看
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);
}
}
我首先使用了学生表和图书表并产生了学生图书表(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);
}
}
相关文章推荐
- Hibernate 关系映射 many-to-many
- Hibernate 关系映射、多对多many to many
- Hibernate关系映射(四)一对多单向关联@OneToMany Annotation方式
- Hibernate关系映射(七)多对多双向关联@ManyToMany Annotation方式
- Hibernate 、多表关联映射-多对一关系(many-to-one)
- hibernate关系映射--单向多对多@ManyToMany
- Hibernate 、多表关联映射-多对一关系(many-to-one)
- Hibernate关系映射之many-to-many
- hibernate关系映射--双向多对多@ManyToMany
- Hibernate 、多表关联映射-多对一关系(many-to-one)
- Hibernate实现many-to-many的映射关系
- Hibernate 、多表关联映射-多对一关系(many-to-one)
- Hibernate映射关系解析(三)--Unidirectional associations--one-to-many
- Hibernate关系映射(六)多对多单向关联@ManyToMany Annotation方式
- Hibernate one-to-many && many-to-many 的关系映射
- Hibernate实体关系映射(OneToMany、ManyToOne双边)——完整实例
- Hibernate实体关系映射(OneToMany单边)——完整实例
- Hibernate12_映射关系---manyTomany
- Hibernate 、多表关联映射 - 一对一关系映射(one- to-one)
- hibernate映射many-to-many