`
starbhhc
  • 浏览: 658053 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

Hibernate映射一对一主键单向关联

阅读更多
SQL:car_pk_single表的主键为engine_pk_single表主键的外键

create table car_pk_single (      
    id number(10,0) not null,      
    name varchar2(15),      
    serial varchar2(30),      
    manufacturer varchar2(50),      
    producedate date,      
    primary key (id)      
);      
create table engine_pk_single (      
    id number(10,0) not null,      
    model varchar2(20),      
    manufacturer varchar2(50),      
    producedate date,      
    primary key (id)      
);      
alter table car_pk_single       
    add constraint fk_car_engine_pk_single       
    foreign key (id)       
    references engine_pk_single(id);    

POJO:Engine类和Car类都有对方的一个引用(以下为省略写法)

public class Car implements Serializable      
{      
private Engine engine;      
}      
public class Engine implements Serializable      
{      
//这里没有属性Car      
... ...      
}     



XML:    Car.hbm.xml     Engine.hbm.xml(以下为省略写法)

<hibernate-mapping package="com.allanlxf.hibernate.association.o2o.entity">  
  <class name="Car" table="car_pk_single" >  
    <id name="id" column="id" type="integer">  
      <generator class="foreign">  
        <param name="property">engine</param>  
      </generator>  
    </id>  
    <one-to-one name="engine" class="Engine"  constrained="true" />  
  </class>  
</hibernate-mapping>  
  
<hibernate-mapping package="com.allanlxf.hibernate.association.o2o.entity">  
  <class name="Engine" table="engine_pk_single" >  
    <id name="id" column="id" type="integer">  
      <generator class="native"></generator>  
    </id>  
  </class>  
</hibernate-mapping>  



a) car.setEngine(engine);
   session.save(car);
程序将先保存engine到数据库,然后再保存car

b) session.get(Car.class, id),打印sql如下:

select  
     car0_.id as id0_0_,   
     car0_.name as name0_0_,   
     car0_.serial as serial0_0_,   
     car0_.manufacturer as manufact4_0_0_,   
     car0_.producedate as produced5_0_0_    
from  
     car_pk_single car0_    
where  
     car0_.id=?  


c) 在car.hbm.xml的one-to-one元素中添加outer-join="true", 能得到一个内连接sql。
d) session.delete(car),将只删除car,而不删除engine。
e) 在car.hbm.xml的one-to-one元素中添加cascade="all" ,再执行session.delete(car),则能级联删除engine

one-to-one主键单向关联映射总结: 需对有外键一方的xml文件设置constrained="true"。
若操作涉及到映射关系双方的数据,以操作有外键一方的对象为主(在有级联的情况下);
若操作只涉及到有外键的一方,则只操作这一方对象即可。
分享到:
评论

相关推荐

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

    总结来说,Hibernate中的一对一主键关联映射允许两个实体共享同一个主键,实现单向关联时只需在依赖方添加对另一方的引用。在实际应用中,应根据业务需求谨慎选择关联类型,以确保数据的完整性和一致性。

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

    本实例将深入探讨如何在Hibernate中实现主键级别的单向一对一映射。 首先,我们理解一对一映射的基本概念。在数据库设计中,一对一映射通常发生在两个表的主键之间,其中一个表的主键是另一个表的外键。在Hibernate...

    Hibernate教程06_关系映射之一对一单向主键关联

    4. **配置一对一关系映射:** 在Hibernate中,可以使用`@OneToOne`注解来声明一对一关联,并通过`@PrimaryKeyJoinColumn`注解指定主键关联的列。在拥有端实体中,可以直接使用这个注解,而在无拥端则不需要任何额外...

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

    虽然一对一关联提供了便利,但过度使用可能会增加数据库查询复杂性,影响性能。因此,合理设计数据模型和关联关系,结合缓存策略,才能实现高性能的持久化操作。 总结来说,Hibernate的一对一主键关联映射,尤其是...

    hibernate主键实现一对一单向关联关系源码

    -- 单向一对一关联Address --&gt; &lt;!-- Address.hbm.xml --&gt; &lt;param name="property"&gt;person&lt;/param&gt; &lt;!-- 引用Person的主键 --&gt; ``` 3. **源码分析** 在`Person`类中,`Address`对象的...

    Hibernate双向一对一关联映射(注解版)

    本主题聚焦于“Hibernate双向一对一关联映射”的注解实现,这是一种高级的数据库设计模式,用于处理两个实体之间一对一的关系。 在Hibernate中,一对一关联映射分为单向和双向。单向一对一映射通常涉及一个实体持有...

    hibernate一对多关联映射(单向关联)

    这篇博客文章“hibernate一对多关联映射(单向关联)”将深入讲解如何配置和使用这种映射关系。 在单向关联中,只有一个实体知道另一个实体的存在,也就是说,只有父实体("一"的一端)有对子实体("多"的一端)的...

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

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

    Hibernate关联映射

    2. Hibernate 一对一主键单向关联: 一对一主键关联是通过共享主键实现的,这意味着两个实体类共用同一个主键。在这种情况下,被引用的实体类(如 Address)不再有自己的独立主键生成策略,而是依赖于引用它的实体...

    Hibernate 一对一外键单向关联

    在Hibernate中,一对一(One-to-One)映射是一种常见的关联关系,它表示两个实体之间存在一对一的对应关系。本篇文章将深入探讨Hibernate中的一对一外键单向关联。 首先,一对一外键关联指的是一个实体通过外键直接...

    hibernate一对一主键关联代码实现

    如果只需要在一方(通常是拥有外键的一方)表示关联,可以使用单向一对一关联。比如只在`Passport`类中定义`Person`对象,而`Person`类不包含`Passport`对象。 在实际应用中,应根据业务需求选择合适的关联方式。...

    hibernate一对一主键关联(注解版)

    如果不希望在一方有引用,可以去掉`mappedBy`属性,变成单向一对一关联。 6. **外键策略**: Hibernate默认会在被引用的一方(在这里是Profile)创建外键,但如果需要在引用方(User)创建外键,可以通过`inverse`...

    Hibernate基于外键的一对多单向关联

    “Hibernate基于外键的一对多单向关联”这个标题指的是在Java持久化框架Hibernate中,如何通过外键实现一个实体类(如订单)与另一个实体类(如商品)之间的一对多关系,并且这种关联是单向的,即从订单端可以访问到...

    hibernate 单向多对多关联映射练习

    本练习主要关注的是Hibernate中的单向多对多关联映射,这是一种常见的关系数据库设计模式,用于表示两个实体间复杂的关系。 在多对多关联中,两个实体类可以相互拥有多个实例,但只在一个方向上建立关联。例如,...

    Hibernate关联映射总结

    #### 四、多对一关联映射 多对一映射是上述一对多映射的逆向形式,即多个实体共享一个父实体。 ```java public class Student { private int id; private String name; @ManyToOne @JoinColumn(name = "class_...

    hibernate外键实现一对一单向关联关系源码

    **一对一关联关系**在数据库设计中表示两个表之间存在唯一的对应关系,例如,一个人可能只有一个护照,或者一个员工只有一个职位。在Hibernate中,这种关系可以通过外键(Foreign Key)在一方或双方实体中实现。 **...

    hibernate单向一对多关联映射(注解版)

    在Java的持久化框架Hibernate中,单向一对多关联映射是常见的数据关系处理方式,尤其是在处理数据库中的实体类和表之间的关系时。本主题主要关注如何使用注解来实现这种映射。Hibernate通过注解使得对象关系映射...

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

    对于单向一对一关联,通常是在一个实体类中定义另一个实体类的引用,而另一个实体类并不知道这个引用。下面是一个简单的例子: ```java // 用户实体类(User) @Entity public class User { @Id @GeneratedValue...

    详解Hibernate一对一映射配置

    这里,Person和Address类共享同一主键`PERSON_ID`,表明它们一对一关联。 2. **单方外键关联(Unidirectional Foreign Key Join)** 在单方外键关联中,一个实体通过外键字段引用另一个实体。配置如下: ```xml ...

Global site tag (gtag.js) - Google Analytics