Hibernate 一对一主键关联实例

有两个表,product (id ,name)
                    image(id,name)

其中image的主键id引用product的主键id,建立约束,形成1对1

下面的代码,将实现如下功能

(1)新建image对象,新建product对象,通过保存product对象,自动对image对象进行保存,并维护完成性约束

 

CREATE   TABLE  `product` (
  `id` 
varchar ( 50 NOT   NULL ,
  `name` 
varchar ( 50 default   NULL ,
  
PRIMARY   KEY   (`id`)
) ENGINE
= InnoDB  DEFAULT  CHARSET = gb2312;
 
CREATE TABLE `image` (
  `id` varchar(50) NOT NULL,
  `name` varchar(50) default NULL,
  PRIMARY KEY  (`id`),
  CONSTRAINT `image_ibfk_1` FOREIGN KEY (`id`) REFERENCES `product` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

 

 

Image和Product的持久类,各持有对方的一个对象,形成1对1关系

 

package  onetoone;

public   class  Image  {
   
private String id;
   
private String name;
   
private Product product;

public Product getProduct() {
    
return product;
}

public void setProduct(Product product) {
    
this.product = product;
}

public String getId() {
    
return id;
}

public void setId(String id) {
    
this.id = id;
}

public String getName() {
    
return name;
}

public void setName(String name) {
    
this.name = name;
}

}

 

 

public   static   void  main(String[] args)  {
        Configuration cfg
=new Configuration();
        cfg.configure();
        SessionFactory sf
=cfg.buildSessionFactory();
        Session session
=sf.openSession();
        Transaction t
=session.beginTransaction();
        
        Image image
=new Image();
        image.setName(
"image1");
        
        Product product
=new Product();
        product.setName(
"product1");
        product.setImage(image);
        
        session.save(product);
          t.commit();

        System.out.println(
"success");

    }

 

持久类的mapping文件

 

<? xml version="1.0" encoding="utf-8" ?>
<! DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<!--  
    Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
< hibernate-mapping  package ="onetoone" >  
  
< class  name ="Product"  table ="product" >  
    
< id  name ="id" >
      
< column  name ="id" ></ column >
      
< generator  class ="uuid.hex" ></ generator >
    
</ id >
    
< property  name ="name"  column ="name" ></ property >
    
< one-to-one  name ="image"
                class
="Image"
                cascade
="all"
                outer-join
="true" >
    
</ one-to-one >
  
</ class >  

</ hibernate-mapping >


<? xml version="1.0" encoding="utf-8" ?>
<! DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<!--  
    Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
< hibernate-mapping  package ="onetoone" >  
  
< class  name ="Image"  table ="image" >  
    
< id  name ="id" >
      
< generator  class ="foreign" >
        
< param  name ="property" > product </ param >
      
</ generator >

    
</ id >
    
< property  name ="name"  column ="name" ></ property >
     
< one-to-one  name ="product"
                 class
="Product"
                 cascade
="all"
                 outer-join
="true" >
    
</ one-to-one >
  
</ class >  

</ hibernate-mapping >

 

测试代码

其中product.setImage(image);
        image.setProduct(product); 很关键,如果写product,setImage(image)会报异常

     public   static   void  main(String[] args)  {
        Configuration cfg
=new Configuration();
        cfg.configure();
        SessionFactory sf
=cfg.buildSessionFactory();
        Session session
=sf.openSession();
        Transaction t
=session.beginTransaction();
        
        Image image
=new Image();
        image.setName(
"image1");
        
        Product product
=new Product();
        product.setName(
"product1");
        product.setImage(image);
        image.setProduct(product);
        session.save(product);
        
        t.commit();
        Product product1
=(Product)session.get(Product.class"40288018114a1c4e01114a1c507e0001");
        System.out.println(product1);
        System.out.println(product1.getImage());
        

        System.out.println(
"success");

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值