hibernate 多对多代码
来源:互联网 发布:开淘宝要注意什么问题 编辑:程序博客网 时间:2024/05/01 23:39
没事干,决定学习一下hibernate,测试了一下多对多单向关联,把代码贴出来,以备以后用。
使用的maven创建项目,pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mxy</groupId> <artifactId>hibernatetest</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>hibernatetest</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>4.2.4.Final</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.26</version></dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> </dependencies></project>
hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost/hibernate</property> <property name="connection.username">root</property> <property name="connection.password">password</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <property name="hibernate.format_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <!-- <mapping resource="org/hibernate/tutorial/domain/Event.hbm.xml"/> --> <mapping class="com.mxy.entity.User"/> <mapping class="com.mxy.entity.Role"/> <mapping class="com.mxy.entity.Permission"/> </session-factory></hibernate-configuration>
java类,User
package com.mxy.entity;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;@Entitypublic class User {@Id@GeneratedValueprivate int id;private String username;private String password;@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE},targetEntity=Role.class)@JoinColumn(name="roleid")private Role role;public Role getRole() {return role;}public void setRole(Role role) {this.role = role;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}
Role
package com.mxy.entity;import java.util.Set;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.ManyToMany;@Entitypublic class Role {@Id@GeneratedValueprivate int id;private String rolename;@ManyToManyprivate Set<Permission> permissions;public Set<Permission> getPermissions() {return permissions;}public void setPermissions(Set<Permission> permissions) {this.permissions = permissions;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getRolename() {return rolename;}public void setRolename(String rolename) {this.rolename = rolename;}}
Permission
package com.mxy.entity;import java.util.Set;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.ManyToMany;@Entitypublic class Permission {@Id@GeneratedValueprivate int id;private String permission;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getPermission() {return permission;}public void setPermission(String permission) {this.permission = permission;}}
测试类:
package com.mxy.hibernatetest;import java.util.HashSet;import java.util.Set;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.AnnotationConfiguration;import org.junit.AfterClass;import org.junit.BeforeClass;import com.mxy.entity.Permission;import com.mxy.entity.Role;import com.mxy.entity.User;public class Test {private static SessionFactory sessionFactory;private static Session session;@BeforeClasspublic static void beforeClass() {sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();session = sessionFactory.getCurrentSession();session.beginTransaction();}@AfterClasspublic static void afterClass() {session.getTransaction().commit();sessionFactory.close();}@org.junit.Testpublic void TestM2M(){Role role = new Role();role.setRolename("userq");Permission per = new Permission();per.setPermission("lookq");Set<Permission> pers = new HashSet<Permission>();pers.add(per);role.setPermissions(pers);session.save(per);session.save(role);}@org.junit.Testpublic void TestM2M_DELETE(){Role role = (Role)session.createQuery("from Role role where role.id = '2'").list().get(0);session.delete(role);}@org.junit.Testpublic void TestUserSave(){User u = new User();u.setUsername("xxx");session.save(u);}@org.junit.Testpublic void TestUpdateUser(){Role role = new Role();role.setRolename("test");User u = (User)session.createQuery("from User user where user.id = '1'").list().get(0);u.setRole(role);session.save(role);session.update(u);}@org.junit.Testpublic void TestInsertPermissionsToRole(){Role role = (Role)session.createQuery("from Role role where role.id = '1'").list().get(0);Set<Permission> pers = new HashSet<Permission>();for(int i = 0;i < 9;i++){Permission per = new Permission();per.setPermission("permission" + i);pers.add(per);session.save(per);}role.setPermissions(pers);session.update(role);}@org.junit.Testpublic void TestDeletePermission(){Permission per = (Permission)session.createQuery("from Permission per where per.id = '4'").list().get(0);session.delete(per);}}
遇到的问题:
1 在使用注解的时候,不能部分加到字段上,部分加到getXXX方法上,需要统一,要不会报错。
2 Role与Permission是多对多的关系,Role是主控方,当想在Permission删除的时候,会报错,显示外键约束,这是我们可以将数据库中role_permission中的对于permission表外键id引用的删除时候的约束改为cacade。我使用的是navicat for mysql,右击role_permission--》设计表--》外键--》删除时,改为cascade。
3 mappedBy配置的是被控方,值为主控方中对应的字段的名字。
- hibernate 多对多代码
- hibernate 多对一以及一对多关系代码
- hibernate多对多
- hibernate多对多
- Hibernate多对多
- hibernate 多对多
- Hibernate多对多
- hibernate 多对多
- Hibernate多对多
- hibernate多对多
- Hibernate多对多
- hibernate 多对多
- Hibernate 多对多
- hibernate 多对多
- hibernate 多对多
- Hibernate多对多
- hibernate多对多
- Hibernate多对多
- 直接拿来用!最火的Android开源项目(二)
- sun.reflect.NativeMethodAccessorImpl.invoke0
- Windows7中创建逻辑驱动器(扩展分区)
- Android中BaseAdapter的理解
- SQL Server 2008导入、导出数据库
- hibernate 多对多代码
- 今天发在群里的UC笔试题简要分析
- 直接拿来用!最火的Android开源项目(完结篇)
- 无法启动android虚拟设别(avd) PANIC: Could not open: X.X
- IPHONE应用开发 - 开发常用控件:UIActionSheet和UIAlertView学习
- Hibernate和jdbc的区别
- Dependency Walker使用说明
- Ogre射线精确查询
- 2012~2013手游产品市场变化总结