Hibernate在快速开发时会经常用到,它的便捷性和orm的面向对象的逻辑性让学习java的朋友容易理解。下面我们来一起研究下最经常用到的“一对多”的结构关系是如何配置的。
1.第一步,我们先将数据库所需要的表创建好
- 创建表t_basic_group
CREATE TABLE `t_basic_group` ( `ID_` varchar(50) DEFAULT NULL, `GROUP_NAME_` varchar(50) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 创建表t_basic_user
CREATE TABLE `t_basic_user` ( `ID_` varchar(50) DEFAULT NULL, `USERNAME_` varchar(50) DEFAULT NULL, `PASSWORD_` varchar(50) DEFAULT NULL, `GROUP_ID_` varchar(50) DEFAULT NULL COMMENT '组id' ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2. 第一步,我们创建model实体类
- TUser类(一)
package com.vern.model; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; import org.hibernate.cfg.ImprovedNamingStrategy; @Entity @org.hibernate.annotations.Entity( /*次注解表名此表在Hibernate启动时不去自动创建相应的sql语句缓存,而是在使用过程中再去创建**/ dynamicInsert = true, dynamicUpdate = true ) @Table(name = "t_basic_user") public class TUser extends ImprovedNamingStrategy implements Serializable{ /** * */ private static final long serialVersionUID = -6024865125684221874L; private String id; private String username; private String password; private String groupId; @Id @GeneratedValue(generator = "system-uuid") /*采用自动生成策略,使用system-uuid**/ @GenericGenerator(name = "system-uuid", strategy = "uuid") @Column(name = "ID_", length = 50, insertable = false, updatable = false) public String getId() { return id; } public void setId(String id) { this.id = id; } @Column(name = "username_") public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @Column(name = "password_") public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Column(name="GROUP_ID_") public String getGroupId() { return groupId; } public void setGroupId(String groupId) { this.groupId = groupId; } }
- TGroup类(多)
package com.vern.model; import java.io.Serializable; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; @Entity @org.hibernate.annotations.Entity( /*次注解表名此表在Hibernate启动时不去自动创建相应的sql语句缓存,而是在使用过程中再去创建**/ dynamicInsert = true, dynamicUpdate = true ) @Table(name="t_basic_group") public class TGroup implements Serializable{ /** * */ private static final long serialVersionUID = 4541001084568065827L; private String id; /*id**/ private String groupName; /*组名**/ private Set<TUser> users = new HashSet<TUser>(); @Id @GeneratedValue(generator = "system-uuid") /*采用自动生成策略,使用system-uuid**/ @GenericGenerator(name = "system-uuid", strategy = "uuid") @Column(name = "ID_", length = 50, insertable = false, updatable = false) public String getId() { return id; } public void setId(String id) { this.id = id; } @Column(name = "GROUP_NAME_") public String getGroupName() { return groupName; } public void setGroupName(String groupName) { this.groupName = groupName; } @OneToMany(cascade=CascadeType.ALL,fetch = FetchType.LAZY) @JoinColumn(name="GROUP_ID_") //对应一的那个字段 public Set<TUser> getUsers() { return users; } public void setUsers(Set<TUser> users) { this.users = users; } }
3.第三步,我们开始单元测试
package com.vern; import java.util.HashSet; import java.util.Set; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import com.vern.model.TGroup; import com.vern.model.TUser; public class Main { public static void main(String[] args) { SessionFactory sessionFactory = HibernateHelper.getSessionFactory(); Session session = sessionFactory.openSession(); TUser user1 = new TUser(); user1.setUsername("admin1"); user1.setPassword("1"); TUser user2 = new TUser(); user2.setUsername("admin2"); user2.setPassword("1"); TGroup group = new TGroup(); group.setGroupName("工作1組"); Set<TUser> users = new HashSet<TUser>(); users.add(user1); users.add(user2); group.setUsers(users); session.save(group); Transaction t = session.beginTransaction(); t.commit(); HibernateHelper.close(); } }