请教hibernate多对多,中间表不会插入数据问题
人员表(User)与权限表(Role)为多对多关系,中间表(User_Role),当使用java程序testn2n时,程序能正常创建user、role、User_Role三张表,且能正常插入数据。当启动tomcat服务器时(spingmvc+hibernate),能正常创建user、role、User_Role三张表,但浏览器输入http://localhost:8080/test/test4.do,数据只能插入user、role表,中间表User_ROLE无法插入数据,请教什么原因?代码如下:
java应用程序:
public class testn2n {
public static void main(String[] args) {
Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties());
ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
User use = new User();
use.setName("admin6");
use.setPwd("123");
Role role = new Role();
role.setName("管理员1");
use.getRole().add(role);
role.getUser().add(use);
session.save(use);
session.save(role);
// 5、提交事务
transaction.commit();
// 6、关闭Session
session.close();
// 7、创建一个SessionFactory对象关闭对象
sessionFactory.close();
}
}
spingmvc Controller代码:
@RequestMapping(value = "/test4.do")
public String testsql4(User user,HttpServletRequest request){
User use = new User();
use.setName("admin");
use.setPwd("123");
Role role = new Role();
role.setName("管理员1");
use.getRole().add(role);
role.getUser().add(use);
userService.add(role);
userService.add(use);
return "oktest";
}
User.java
public class User {
private int id;
private String name;
private String pwd;
Set<Role> role = new HashSet<>();
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 String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public Set<Role> getRole() {
return role;
}
public void setRole(Set<Role> role) {
this.role = role;
}
}
User.hbm.xml
<hibernate-mapping>
<class name="com.dfp.domain.User" table="USERTABLE">
<id name="id" type="int">
<column name="ID" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<property name="pwd" type="java.lang.String">
<column name="PWD" />
</property>
<set name="role" table="User_Role" cascade="all">
<key>
<column name="U_ID" />
</key>
<many-to-many column="R_ID" class="com.dfp.domain.Role" />
</set>
</class>
</hibernate-mapping>
Role.java
public class Role {
private int id;
private String name;
Set<User> user = new HashSet<>();
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<User> getUser() {
return user;
}
public void setUser(Set<User> user) {
this.user = user;
}
}
Role.hbm.xml
<hibernate-mapping>
<class name="com.dfp.domain.Role" table="ROLE">
<id name="id" type="int">
<column name="ID" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<set name="user" table="User_Role" inverse="true">
<key>
<column name="R_ID" />
</key>
<many-to-many column="U_ID" class="com.dfp.domain.User" />
</set>
</hibernate-mapping>