栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Hibernate实现实体关联映射(两个实体双向关联)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Hibernate实现实体关联映射(两个实体双向关联)

这个代码是实现person表与idcard表的双向关联,两个表的主键名称相同(或不相同),但对应记录的两个主键的取值是一样的(由一方产生主键值,然后提供给另一方的主键值,即共享主键)
数据库配置文件Hibernate.cfg.xml
这个配置文件在其他工程里使用的好好的,在这个工程里一直自动建表失败,后来把这句话里的update改成create就可以自动建表了
改之前

update

改之后

create

但是这样也存在一个bug,就是每次运行都会把原来的表删掉然后重新建表,这个还需要有空的时候再研究一下,不然就需要第一次运行时用create,之后运行一直update,不太方便。
源代码




	
	com.mysql.cj.jdbc.Driver
	jdbc:mysql://localhost:3306/card?useSSL=false&serverTimezone=UTC
	root
	123456
	
	
	org.hibernate.dialect.MySQL5Dialect
	
	
	create
	
	
	true
	
	
	true
	
	
		org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider
	2
	5
	300
	100
	3000
	
	true

	
	
	
	



HibernateUtil.java

package com.edu.db_util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

public final class HibernateUtil {
	private static SessionFactory sessionFactory;
	private static ThreadLocal session =new ThreadLocal();
	private HibernateUtil(){}
	static{
		Configuration configuration=new Configuration().configure();
		StandardServiceRegistryBuilder regbuilder=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
		ServiceRegistry serviceRegistry=regbuilder.build();
		sessionFactory=configuration.buildSessionFactory(serviceRegistry);
	}
	public static Session getThreadLocalSession(){//获取session对象的方法
		Session s=(Session)session.get();
		if(s==null){
			s=sessionFactory.openSession();
			session.set(s);
		}
		return s;
	}
	public static void clossSession(){
		Session s=(Session)session.get();
		if(s!=null){s.close();session.set(null);}
	}
}

Person类

package com.edu.entity.two.one2one_pk;

public class Person {
	private int id;
	private String name;
	private IdCard idCard;
	public Person(int id, String name, IdCard idCard) {
		super();
		this.id = id;
		this.name = name;
		this.idCard = idCard;
	}
	
	public Person() {
		super();
	}

	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 IdCard getIdCard() {
		return idCard;
	}
	public void setIdCard(IdCard idCard) {
		this.idCard = idCard;
	}
	
}

IdCard类

package com.edu.entity.two.one2one_pk;

public class IdCard {
	private int id;
	private String cardNo;
	private Person person;
	public IdCard(int id, String cardNo, Person person) {
		super();
		this.id = id;
		this.cardNo = cardNo;
		this.person = person;
	}
	public IdCard() {
		super();
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getCardNo() {
		return cardNo;
	}
	public void setCardNo(String cardNo) {
		this.cardNo = cardNo;
	}
	public Person getPerson() {
		return person;
	}
	public void setPerson(Person person) {
		this.person = person;
	}
	
	
	
}

IdCard映射文件





    
        
            
            
            	person
            
        
        
            
        
        
    


Person映射文件





    
        
            
            
        
        
            
        
        
    


补充:若为基于外键的一对一双向关联,如本例中person为主动方,idCard为被动方时,需要在被动方给出外键与主动方主键的对应关系。
即把idCard映射文件中 < one-to-one > 标签更改为如下内容


测试代码InsertMain

package com.edu.entity.two.one2one_pk;



import org.hibernate.Session;
import org.hibernate.Transaction;

import com.edu.db_util.HibernateUtil;

public class InsertMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person person=new Person();
		person.setName("张三");
		IdCard idCard=new IdCard();
		idCard.setCardNo("123123");
		idCard.setPerson(person);
		Session session=HibernateUtil.getThreadLocalSession();
		Transaction tx=session.beginTransaction();
		session.save(person);
		session.save(idCard);
		tx.commit();
		HibernateUtil.clossSession();
		
	}

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/571616.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号