Hibernate多对多映射为第三张表manytomany【xml和注解】实例(十七)
2013-09-27 10:14
696 查看
1 这个方法比较不错 【原先的多对多失败了就是因为没有进行第三张表映射造成的】
3结果
注解版看的稍微简单:
package com.bjsxt.hibernate;
import java.util.HashSet;
import java.util.Set;
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.OneToMany;
import javax.persistence.Table;
@Entity
public class Teacher {
private int id;
private String name;
private Set<Student> students = new HashSet<Student>();
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToMany
@JoinTable(name="t_s",
joinColumns={@JoinColumn(name="teacher_id")},
inverseJoinColumns={@JoinColumn(name="student_id")}
)
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
}
package com.sm.hibernate.pojo; import java.util.Set; public class IUser { private int id; private String name; private ICard iCard; private I2Card i2Card; private Set<ICourse> courses; public Set<ICourse> getCourses() { return courses; } public void setCourses(Set<ICourse> courses) { this.courses = courses; } public I2Card getI2Card() { return i2Card; } public void setI2Card(I2Card i2Card) { this.i2Card = i2Card; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public ICard getiCard() { return iCard; } public void setiCard(ICard iCard) { this.iCard = iCard; } }
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.sm.hibernate.pojo"> <class name="IUser" table="iuser"> <id name="id"> <generator class="native"></generator> </id> <property name="name" not-null ="true"></property> <one-to-one name="iCard"></one-to-one> <many-to-one name="i2Card" unique="true"></many-to-one> <set name="courses" table="iuc"> <key column="iUserId"></key> <many-to-many class="ICourse" column="iCourseId"></many-to-many> </set> </class> </hibernate-mapping>
package com.sm.hibernate.pojo; import java.util.Set; public class ICourse { private int id; private String name; private Set<IUser> iUsers; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<IUser> getiUser() { return iUsers; } public void setiUser(Set<IUser> iUser) { this.iUsers = iUser; } }
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.sm.hibernate.pojo"> <class name="ICourse" table="icourse"> <id name="id"> <generator class="native"></generator> </id> <property name="name" not-null ="true"></property> <set name="iUsers" table="iuc"> <key column="iCourseId"></key> <many-to-many class="ICourse" column="iUserId"></many-to-many> </set> </class> </hibernate-mapping>
3结果
九月 27, 2013 10:11:44 上午 org.hibernate.annotations.common.Version <clinit> INFO: HCANN000001: Hibernate Commons Annotations {4.0.1.Final} 九月 27, 2013 10:11:44 上午 org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {4.1.1} 九月 27, 2013 10:11:44 上午 org.hibernate.cfg.Environment <clinit> INFO: HHH000206: hibernate.properties not found 九月 27, 2013 10:11:44 上午 org.hibernate.cfg.Environment buildBytecodeProvider INFO: HHH000021: Bytecode provider name : javassist 九月 27, 2013 10:11:44 上午 org.hibernate.cfg.Configuration configure INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml 九月 27, 2013 10:11:44 上午 org.hibernate.cfg.Configuration getConfigurationInputStream INFO: HHH000040: Configuration resource: /hibernate.cfg.xml 九月 27, 2013 10:11:44 上午 org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide! 九月 27, 2013 10:11:44 上午 org.hibernate.cfg.Configuration addResource INFO: HHH000221: Reading mappings from resource: com/sm/hibernate/pojo/Book.hbm.xml 九月 27, 2013 10:11:44 上午 org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide! 九月 27, 2013 10:11:44 上午 org.hibernate.cfg.Configuration addResource INFO: HHH000221: Reading mappings from resource: com/sm/hibernate/pojo/IUser.hbm.xml 九月 27, 2013 10:11:44 上午 org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide! 九月 27, 2013 10:11:44 上午 org.hibernate.cfg.Configuration addResource INFO: HHH000221: Reading mappings from resource: com/sm/hibernate/pojo/ICard.hbm.xml 九月 27, 2013 10:11:44 上午 org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide! 九月 27, 2013 10:11:44 上午 org.hibernate.cfg.Configuration addResource INFO: HHH000221: Reading mappings from resource: com/sm/hibernate/pojo/I2Card.hbm.xml 九月 27, 2013 10:11:44 上午 org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide! 九月 27, 2013 10:11:44 上午 org.hibernate.cfg.Configuration addResource INFO: HHH000221: Reading mappings from resource: com/sm/hibernate/pojo/ICourse.hbm.xml 九月 27, 2013 10:11:44 上午 org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide! 九月 27, 2013 10:11:44 上午 org.hibernate.cfg.Configuration addResource INFO: HHH000221: Reading mappings from resource: com/sm/hibernate/pojo/Category.hbm.xml 九月 27, 2013 10:11:44 上午 org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide! 九月 27, 2013 10:11:44 上午 org.hibernate.cfg.Configuration doConfigure INFO: HHH000041: Configured SessionFactory: null 九月 27, 2013 10:11:45 上午 org.hibernate.dialect.Dialect <init> INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 九月 27, 2013 10:11:45 上午 org.hibernate.tool.hbm2ddl.SchemaExport execute INFO: HHH000227: Running hbm2ddl schema export 九月 27, 2013 10:11:45 上午 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!) 九月 27, 2013 10:11:45 上午 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000115: Hibernate connection pool size: 20 九月 27, 2013 10:11:45 上午 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000006: Autocommit mode: false 九月 27, 2013 10:11:45 上午 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/wanju] 九月 27, 2013 10:11:45 上午 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000046: Connection properties: {user=root, password=****} alter table book drop foreign key FK2E3AE949F733E alter table icard drop foreign key FK5F61EF9DFFCD6A8 alter table iuc drop foreign key FK198B735A1D52C 九月 27, 2013 10:11:45 上午 org.hibernate.tool.hbm2ddl.SchemaExport perform ERROR: HHH000389: Unsuccessful: alter table iuc drop foreign key FK198B735A1D52C alter table iuc drop foreign key FK198B76096495C 九月 27, 2013 10:11:45 上午 org.hibernate.tool.hbm2ddl.SchemaExport perform ERROR: Table 'wanju.iuc' doesn't exist 九月 27, 2013 10:11:45 上午 org.hibernate.tool.hbm2ddl.SchemaExport perform ERROR: HHH000389: Unsuccessful: alter table iuc drop foreign key FK198B76096495C 九月 27, 2013 10:11:45 上午 org.hibernate.tool.hbm2ddl.SchemaExport perform ERROR: Table 'wanju.iuc' doesn't exist alter table iuc drop foreign key FK198B76F252F3C 九月 27, 2013 10:11:45 上午 org.hibernate.tool.hbm2ddl.SchemaExport perform ERROR: HHH000389: Unsuccessful: alter table iuc drop foreign key FK198B76F252F3C 九月 27, 2013 10:11:45 上午 org.hibernate.tool.hbm2ddl.SchemaExport perform ERROR: Table 'wanju.iuc' doesn't exist alter table iuser drop foreign key FK5FE8FB4D3B53C79 drop table if exists book drop table if exists category drop table if exists i2card drop table if exists icard drop table if exists icourse drop table if exists iuc drop table if exists iuser create table book ( id integer not null auto_increment, name varchar(200) not null, author varchar(50) not null, categoryId integer, primary key (id) ) create table category ( id integer not null auto_increment, name varchar(200) not null, primary key (id) ) create table i2card ( id integer not null auto_increment, name varchar(255) not null, primary key (id) ) create table icard ( id integer not null, name varchar(255) not null, primary key (id) ) create table icourse ( id integer not null auto_increment, name varchar(255) not null, primary key (id) ) create table iuc ( iUserId integer not null, iCourseId integer not null, primary key (iCourseId, iUserId) ) create table iuser ( id integer not null auto_increment, name varchar(255) not null, i2Card integer unique, primary key (id) ) alter table book add index FK2E3AE949F733E (categoryId), add constraint FK2E3AE949F733E foreign key (categoryId) references category (id) alter table icard add index FK5F61EF9DFFCD6A8 (id), add constraint FK5F61EF9DFFCD6A8 foreign key (id) references iuser (id) alter table iuc add index FK198B735A1D52C (iUserId), add constraint FK198B735A1D52C foreign key (iUserId) references icourse (id) alter table iuc add index FK198B76096495C (iUserId), add constraint FK198B76096495C foreign key (iUserId) references iuser (id) alter table iuc add index FK198B76F252F3C (iCourseId), add constraint FK198B76F252F3C foreign key (iCourseId) references icourse (id) alter table iuser add index FK5FE8FB4D3B53C79 (i2Card), add constraint FK5FE8FB4D3B53C79 foreign key (i2Card) references i2card (id) 九月 27, 2013 10:11:47 上午 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop INFO: HHH000030: Cleaning up connection pool [jdbc:mysql://localhost:3306/wanju] 九月 27, 2013 10:11:47 上午 org.hibernate.tool.hbm2ddl.SchemaExport execute INFO: HHH000230: Schema export complete
注解版看的稍微简单:
package com.bjsxt.hibernate;
import java.util.HashSet;
import java.util.Set;
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.OneToMany;
import javax.persistence.Table;
@Entity
public class Teacher {
private int id;
private String name;
private Set<Student> students = new HashSet<Student>();
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToMany
@JoinTable(name="t_s",
joinColumns={@JoinColumn(name="teacher_id")},
inverseJoinColumns={@JoinColumn(name="student_id")}
)
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
}
package com.bjsxt.hibernate; import java.util.HashSet; import java.util.Set; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToMany; @Entity public class Student { private int id; private String name; private Set<Teacher> teachers = new HashSet<Teacher>(); @ManyToMany(mappedBy="students") public Set<Teacher> getTeachers() { return teachers; } public void setTeachers(Set<Teacher> teachers) { this.teachers = teachers; } @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
相关文章推荐
- Hibernate之模拟三表问题之多对多manytomany之映射为3表注解版-与(十七)xml版本对应(二十三)
- hibernate单向多对多映射(many-to-many)XML与注解版
- Hibernate多对一实例【xml和注解】many-to-one(十六)
- hibernate单向多对一关联映射(many-to-one)XML与注解版
- hibernate单向一对多关联映射(one-to-many)XML与注解版
- Hibernate主键一对一关联映射实例【xml和注解版本@OneToOne@JoinColumn(name="wifeId")--主键单向】(十二)
- 使用注解的Hibernate one-to-many映射
- Hibernate实体关系映射(OneToMany单边)——完整实例
- Hibernate 中annotations(注解开发)的@OneToMany 一对多双向关联映射后,出现的jar包冲突问题
- hibernate注解版关联映射Many-to-One/Many-to-Many等&异常处理
- Hibernate实体关系映射(OneToMany、ManyToOne双边)——完整实例
- Hibernate中的manytomany映射实例一
- Hibernate中的manytomany映射实例一
- Hibernate中的manytomany映射实例一(多对多双向)
- hibernate单向一对一关联映射(one-to-one)XML与注解版
- Hibernate映射与注解实例总结
- Hibernate实战_笔记20(全局XML映射元数据、全局的注解元数据、占位符)
- Hibernate 、多表关联映射-多对一关系(many-to-one)
- Hibernate实体基本注解,ManyToOne,OneToMany,cascade,orphanRemoval等说明
- hibernate双向一对多关联映射XML与注解版