有连个实体如下:
CREATE TABLE `product` (
`id` varchar(50) NOT NULL,
`name` varchar(50) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `product` (
`id` varchar(50) NOT NULL,
`name` varchar(50) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312; 首先,建立这两个实体如下:
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;
}
}
package onetoone;
public class Product ...{
private String id;
private String name;
private Image image;
public String getId() ...{
return id;
}
public void setId(String id) ...{
this.id = id;
}
public Image getImage() ...{
return image;
}
public void setImage(Image image) ...{
this.image = image;
}
public String getName() ...{
return name;
}
public void setName(String name) ...{
this.name = name;
}
}
接下来建立两个持久类的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" unsaved-value="null">
<column name="id"></column>
<generator class="uuid.hex"></generator>
</id>
<property name="name" column="name"></property>
<one-to-one name="image"
class="Image"
fetch="join"
cascade="all"
property-ref="product">
</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="uuid.hex"/>
</id>
<property name="name" column="name"></property>
<many-to-one name="product"
class="Product"
unique="true"
column="productid">
</many-to-one>
</class>
</hibernate-mapping>
测试代码:
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);
Product p=(Product)session.get(Product.class, "1");
System.out.println(p.getImage());
t.commit();
System.out.println("success");
}
先在数据库中插入一个product的记录,id为1,image也插入一条记录,其productid为1,便于测试 查询代码
查询结果为
Hibernate: select product0_.id as id1_1_, product0_.name as name1_1_, image1_.id as id0_0_, image1_.name as name0_0_, image1_.productid as productid0_0_ from product product0_ left outer join image image1_ on product0_.id=image1_.productid where product0_.id=?
onetoone.Image@6754d6
success
有一点很重要,也是困扰笔者几个小时的地方,就是在主方(product)的配置文件中<one-to-one>中的
property-ref="product" 如果不加这个属性,Hibernate会使用image表的主键作为关联类的属性,结果HQL语句就会变成
Hibernate: select product0_.id as id1_1_, product0_.name as name1_1_, image1_.id as id0_0_, image1_.name as name0_0_, image1_.productid as productid0_0_ from product product0_ left outer join image image1_ on product0_.id=image1_.id where product0_.id=?
大家注意看,product0_.id=image1_.i,这明显是不对的,应该是product0_.id=image1_.productid ,这样才能正确关联上
分享到:
相关推荐
在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的...以上就是关于Hibernate一对一唯一外键关联映射(单向关联)的详细说明。通过这种方式,我们可以轻松地在Java应用中处理数据库的一对一关系。
本篇主要探讨的是Hibernate中的一对一(OneToOne)关系映射,特别是唯一外键关联(UniDirectional and Bidirectional Association)的情况。我们将深入理解这种关联方式的配置、实现以及它在实际应用中的价值。 1. ...
在本案例中,我们将详细探讨“hibernate一对一唯一外键关联映射(单项关联)”。 首先,一对一关联分为两种类型:单向关联和双向关联。单向关联意味着在一个实体类中存在对另一实体的引用,而另一实体类中没有相应...
通过这种方式,你可以实现Hibernate中一对一单向外键关联及联合主键的配置。这使得两个实体间的关系更加明确,同时也方便了数据的管理和操作。在实际项目中,这样的设计可以提高数据的完整性和一致性。
本篇将深入探讨Hibernate中的一对一唯一外键关联映射,特别是双向关联的实现。 ### 1. 一对一关联概述 一对一关联意味着一个实体只能与另一个实体的单一实例相关联,这种关系通常出现在两个表之间,其中一个表的...
主键关联是通过两个实体的主键相等来实现一对一关系,而唯一外键关联则是在一个实体中定义另一个实体的唯一外键字段。 在Hibernate中,配置一对一唯一外键关联映射通常涉及以下步骤: 1. **实体类定义**: - 对于...
在Hibernate中,一对一关系可以通过两种方式实现:外键关联和主键关联。本教程重点讨论的是外键关联,这意味着一方的表将包含指向另一方表的外键。双向关联意味着两个实体类都可以直接访问彼此。 接下来,我们将...
本教程重点讲解了一对一(One-to-One)单向外键关联的实现方法。在数据库设计中,一对一关系意味着两个实体之间存在唯一对应的关系,比如一个人只有一个身份证,或者一个房间只有一扇门。在Hibernate中,这种关系...
**标题:Hibernate一对一外键映射** 在关系型数据库中,一对一(One-to-One)关联是一种常见的关系,它表示两个实体之间存在着唯一的关系。Hibernate,作为Java领域中的一个流行的ORM(对象关系映射)框架,提供了...
本篇将深入探讨在Hibernate中实现一对一唯一外键的双向关联。 **一、配置一对一关联** 在Hibernate中,一对一关联可以通过以下两种方式建立: 1. **通过主键关联(Primary Key Join)**:这种关联方式下,一方的...
本文将深入探讨如何使用Hibernate注解实现基于外键的一对多双向关联。我们将通过具体实例来解析这个主题,并结合源码分析其工作原理。 首先,我们要明白一对多关联意味着一个实体可以拥有多个关联的实体。在数据库...
在Java持久化框架Hibernate中,一对一(One-to-One)映射是对象关系映射的一种常见方式,用于表示两个实体...了解并掌握这些配置方法,可以帮助开发者更有效地实现Hibernate中的一对一映射,提高代码的可读性和维护性。
以上就是关于Hibernate一对一关联关系的详细解释,通过理解和掌握这些知识点,你可以更有效地在Java项目中设计和实现数据库模型,提高代码的可读性和维护性。希望这份资源能帮助你更好地理解和运用Hibernate框架。
在这个“hibernate一对一实例”中,我们将深入探讨如何在Hibernate中实现一对一的映射,并通过具体的代码示例来帮助理解。 一、一对一关联的概念 一对一关联意味着一个实体只与另一个实体的一个实例相关联,反之...
本篇将深入探讨在Hibernate中实现一对一主键关联映射的单项关联方式。这种关联意味着两个实体类共享相同的主键,即一个实体类的一个实例对应另一个实体类的唯一实例。 首先,我们要明确一对一主键关联映射的基本...
标题"Hibernate一对一主键关联映射(双向关联)"中的"主键关联"指的是两个实体通过共享相同的主键来建立关联。"双向关联"则意味着在两个实体类中,都可以直接访问到对方的实例,即在实体A中有一个对实体B的引用,...
总的来说,通过上述步骤,我们利用Hibernate的外键查询功能实现了`br_basic`与`city_info`表之间的多对一关联查询,确保了数据的完整性和一致性。在实际开发中,这可以大大提高数据操作的效率和便捷性。
在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系数据库模型映射方式,用于处理两个实体之间存在多个实例互相关联的情况。本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关...
标题"Hibernate ORM - 一对一连接表关联关系" 提示我们,这里主要讨论的是Hibernate ORM框架在处理数据库中一对一(One-to-One)关联映射的方法。Hibernate是一个流行的Java对象关系映射(ORM)工具,它允许开发者用...
在Hibernate中,一对一关联可以通过`@OneToOne`注解实现。下面我们将通过一个简单的例子来说明: 假设我们有两个实体类,一个是`Person`,表示人,另一个是`DriverLicense`,表示驾照。一个人只有一个驾照,而一个...