`
esffor
  • 浏览: 1367473 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate 一对一主键关联实例

阅读更多

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

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

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

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

 

CREATE TABLE `product` (
  `id` 
varchar(50NOT NULL,
  `name` 
varchar(50default 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");

    }


分享到:
评论

相关推荐

    hibernate一对一主键关联映射(单项关联)

    本篇将深入探讨在Hibernate中实现一对一主键关联映射的单项关联方式。这种关联意味着两个实体类共享相同的主键,即一个实体类的一个实例对应另一个实体类的唯一实例。 首先,我们要明确一对一主键关联映射的基本...

    Hibernate一对一主键关联映射(双向关联)

    标题"Hibernate一对一主键关联映射(双向关联)"中的"主键关联"指的是两个实体通过共享相同的主键来建立关联。"双向关联"则意味着在两个实体类中,都可以直接访问到对方的实例,即在实体A中有一个对实体B的引用,...

    Hibernate教程07_关系映射之一对一双向主键关联

    在本教程中,我们将深入探讨Hibernate中的一个关键概念——关系映射,特别是“一对一双向主键关联”。这种关联类型是数据库设计中的常见模式,它允许两个实体类之间通过共享相同的主键来建立关联。在Java应用中,...

    Hibernate一对多使用非主键关联设置

    下面我们将详细探讨如何在Hibernate中设置一对多非主键关联。 首先,我们需要理解在Hibernate中一对多关联的基本概念。在Java对象中,这通常通过在一方类(拥有多个实例的一方)上定义一个集合属性来表示。这个集合...

    Hibernate ORM - 一对一主键关联关系

    综上所述,Hibernate ORM 的一对一主键关联关系是通过共享主键或外键约束来实现两个实体间的唯一对应。在实际应用中,开发者需要根据需求选择合适的关联方式,并注意关联带来的性能影响。通过理解并熟练掌握这些配置...

    hibernate一对一实例

    在这个“hibernate一对一实例”中,我们将深入探讨如何在Hibernate中实现一对一的映射,并通过具体的代码示例来帮助理解。 一、一对一关联的概念 一对一关联意味着一个实体只与另一个实体的一个实例相关联,反之...

    hibernate 主键一对一映射(单向) 实例(java类)

    通过以上步骤,我们就可以在Hibernate中实现单向一对一主键映射。这个实例中的`hibernate_fifth_one2one_pk_1`文件可能包含了相关的代码示例或测试用例,供你参考和学习。理解并掌握一对一映射是提高Hibernate使用...

    Hibernate一对一,一对多,多对多实例

    本实例将深入探讨Hibernate中的三种基本关联关系:一对一(One-to-One)、一对多(One-to-Many)以及多对多(Many-to-Many)的实现方式。 1. **一对一关联**: 一对一关联通常出现在两个实体之间存在唯一对应关系...

    hibernate一对一关联关系

    本资源主要探讨的是“hibernate一对一关联关系”。 一对一关联关系在现实世界中很常见,比如一个人只有一个身份证,或者一个公司的总部只有一个。在Hibernate中,设置一对一关联关系可以帮助我们更好地管理和操作...

    Hibernate一对一主键映射

    在这个实例中,我们将深入探讨Hibernate一对一主键映射的概念、配置以及如何通过源代码和测试程序进行实践。 1. **一对一关系理解**: 一对一关系指的是一个实体类中的记录对应另一个实体类中的唯一一条记录。例如...

    Hibernate一对一唯一外键关联映射(单向关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的...以上就是关于Hibernate一对一唯一外键关联映射(单向关联)的详细说明。通过这种方式,我们可以轻松地在Java应用中处理数据库的一对一关系。

    Hibernate一对一单向外键关联 (联合主键annotation)

    本篇将详细讲解如何使用Hibernate进行一对一单向外键关联,并且该关联涉及到联合主键的注解配置。 首先,一对一关联可以分为两种类型:单向和双向。在单向一对一关联中,只有一个实体知道另一个实体的存在,而另一...

    hibernate主键一对一关联映射代码示例

    本示例将深入讲解如何在Hibernate中实现主键一对一关联映射,并通过代码示例进行解析。 一对一关联意味着在一个实体中,每个实例都唯一对应另一个实体的实例。这种关联可以通过共享主键(primary key)或外键...

    一对一主键关联 XML版

    总结来说,一对一主键关联在Hibernate XML配置中通过`&lt;one-to-one&gt;`元素实现,它使得Java对象间的关联关系得以在数据库层面体现。这种关联模式提升了数据模型的清晰度,也方便了开发人员进行数据操作。理解并熟练...

    Hibernate一对一唯一外键关联映射(双向关联)

    主键关联是通过两个实体的主键相等来实现一对一关系,而唯一外键关联则是在一个实体中定义另一个实体的唯一外键字段。 在Hibernate中,配置一对一唯一外键关联映射通常涉及以下步骤: 1. **实体类定义**: - 对于...

    hibernate一对一唯一外键关联映射(单项关联)

    在本案例中,我们将详细探讨“hibernate一对一唯一外键关联映射(单项关联)”。 首先,一对一关联分为两种类型:单向关联和双向关联。单向关联意味着在一个实体类中存在对另一实体的引用,而另一实体类中没有相应...

    hibernate一对一之唯一外键关联(双向关联)

    本篇主要探讨的是Hibernate中的一对一(OneToOne)关系映射,特别是唯一外键关联(UniDirectional and Bidirectional Association)的情况。我们将深入理解这种关联方式的配置、实现以及它在实际应用中的价值。 1. ...

    hibernate框架一对一测试案例

    **hibernate框架一对一关联测试案例详解** 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者能够用Java对象来处理数据。本篇我们将深入探讨Hibernate中的一对一...

    hibernate一对一唯一外键关联映射(双向关联)

    一对一关联意味着一个实体只能与另一个实体的单一实例相关联,这种关系通常出现在两个表之间,其中一个表的主键作为另一个表的外键。在Hibernate中,可以使用`@OneToOne`注解来建立这种关联。 ### 2. 唯一外键关联 ...

Global site tag (gtag.js) - Google Analytics