模型user,address,user_address
user_address的userid和addressid为user,address的外键
user sql
CREATE TABLE `NewTable` (
`userid` int(11) NOT NULL AUTO_INCREMENT ,
`account` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`userid`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=88
ROW_FORMAT=COMPACT
;
address sql
CREATE TABLE `NewTable` (
`addressid` int(11) NOT NULL AUTO_INCREMENT ,
`addressinfo` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`addressid`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=81
ROW_FORMAT=COMPACT
;
user_address
CREATE TABLE `NewTable` (
`addressid` int(11) NOT NULL ,
`userid` int(11) NOT NULL ,
PRIMARY KEY (`addressid`, `userid`),
FOREIGN KEY (`addressid`) REFERENCES `address` (`addressid`) ON DELETE RESTRICT ON UPDATE RESTRICT,
FOREIGN KEY (`userid`) REFERENCES `user` (`userid`) ON DELETE RESTRICT ON UPDATE RESTRICT,
INDEX `userid` (`userid`) USING BTREE
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
ROW_FORMAT=COMPACT
;
user
package dto;
import java.util.HashSet;
import java.util.Set;
public class User {
private int userid;
private String account;
private String password;
private Set<Address> addresses = new HashSet<Address>();
public Set<Address> getAddresses() {
return addresses;
}
public void setAddresses(Set<Address> addresses) {
this.addresses = addresses;
}
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
user.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2015-6-21 21:58:01 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="dto.User" table="user" catalog="snlu">
<id name="userid" type="java.lang.Integer">
<column name="userid" />
<generator class="identity" />
</id>
<property name="account" type="string">
<column name="account" />
</property>
<property name="password" type="string">
<column name="password" />
</property>
<set name="addresses" table="user_address" inverse="true" lazy="true" fetch="select">
<key>
<column name="userid" not-null="true" />
</key>
<many-to-many entity-name="dto.Address">
<column name="addressid" not-null="true" />
</many-to-many>
</set>
</class>
</hibernate-mapping>
address
package dto;
import java.util.HashSet;
import java.util.Set;
public class Address {
private Integer addressid;
private Set<User>users=new HashSet<User>();
private String addressinfo;
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
public Integer getAddressid() {
return addressid;
}
public void setAddressid(Integer addressid) {
this.addressid = addressid;
}
public String getAddressinfo() {
return addressinfo;
}
public void setAddressinfo(String addressinfo) {
this.addressinfo = addressinfo;
}
}
address.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2015-6-21 21:58:01 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="dto.Address" table="address" catalog="snlu">
<id name="addressid" type="java.lang.Integer">
<column name="addressid" />
<generator class="identity" />
</id>
<property name="addressinfo" type="string">
<column name="addressinfo" />
</property>
<set name="users" table="user_address" inverse="false" lazy="true" fetch="select">
<key>
<column name="addressid" not-null="true" />
</key>
<many-to-many entity-name="dto.User">
<column name="userid" not-null="true" />
</many-to-many>
</set>
</class>
</hibernate-mapping>
main
package test;
import org.hibernate.Session;
import org.hibernate.Transaction;
import util.HibernateUtil;
import dto.Address;
import dto.User;
public class UserTest {
public static void main(String[] args) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
Address a = new Address();
a.setAddressinfo("america");
Address a2 = new Address();
a2.setAddressinfo("china");
User user = new User();
user.setAccount("jack");
user.setPassword("111111");
User user2 = new User();
user2.setAccount("peter");
user2.setPassword("111111");
user.getAddresses().add(a);
user.getAddresses().add(a2);
user2.getAddresses().add(a);
a.getUsers().add(user);
a.getUsers().add(user2);
a2.getUsers().add(user);
session.save(a);
session.save(a2);
session.save(user);
session.save(user2);
tx.commit();
HibernateUtil.closeSession();
}
}