hibernate一对多配置(注解)

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

猜你喜欢

转载自javavern.iteye.com/blog/2215029