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();
}
}