`
wangjian5748
  • 浏览: 211584 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

hibernate annotation对jpa主键one-to-one映射关系支持的有问题

阅读更多
我们都知道在hibernate中有个foreign的生成主键的方式,这个功能主要是用在主键关联的one-to-one关系,并且我在用hbm文件中配过这种方式,在ejb3/jpa规范中也提供了一个相似功能的annotation的:PrimaryKeyJoinColumn。但是,我在用hibernate中使用这种方式的映射时,发现不起作用,也就是使被影射的对象不会自动获得ID,具体可以参看下面这个示例。
业务逻辑:系统中有多个Employee,每个Employee可以建一个且只能建一个系统用户User,但并不是每个Employee都有User,这里的就是典型的主键映射的one-to-one的关系
具体代码:
Employee.java
@Entity
@Table(name 
= "T_EMPLOYEE")
public class Employee implements Serializable ...{

    
private String id;
    
private User user;

    
public Employee() ...{}

    @Id
    @GenericGenerator(name 
= "generator", strategy = "uuid")
    @GeneratedValue(generator 
= "generator")
    @Column(name 
= "ID")
    
public String getId() ...{
        
return this.id;
    }

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


    @OneToOne(mappedBy 
= "employee")
    
public User getUser() ...{
        
return user;
    }

    
public void setUser(User user) ...{
        
this.user = user;
    }

}

 
User.java
@Entity
@Table(name 
= "T_USER")
public class User implements Serializable ...{

    
private String id;
    
private Employee employee;

    
public User() ...{
    }


    
//利用hibernate提供的foreign功能来生成主键方式,这在创建User对象的时候就不需要手动设置User的ID
    @Id
    @GenericGenerator(name 
= "generator"
                      strategy 
= "foreign"
                      parameters 
= ...
                        @Parameter(name 
= "property", value = "employee"
                      }
)
    @GeneratedValue(generator 
= "generator")
    @Column(name 
= "ID")
    
public String getId() ...{
        
return id;
    }

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


    @OneToOne(cascade 
= CascadeType.PERSIST)
    @PrimaryKeyJoinColumn
    
public Employee getEmployee() ...{
        
return employee;
    }

    
public void setEmployee(Employee employee) ...{
        
this.employee = employee;
    }

}

由于@PrimaryKeyJoinColumn不起作用,我只能用在User的ID上使用foreign主键生成器

在hibernate的官方jira上也有人提过这个问题(http://jira.jboss.com/jira/browse/HIBERNATE-73),不过好像没人响应,大家可以去看看

以上环境是:hibenrate3.2.4.sp1,hibernate-annotations-3.3.0.GA

分享到:
评论

相关推荐

    hibernate-annotation3.4.0 + hibernate-distribution3.3.2 + slf4j-1.5.8.rar

    该版本支持JPA(Java Persistence API),提供了对象-关系映射(ORM)的能力,使得开发者可以使用面向对象的方式处理数据库事务,而无需编写大量SQL语句。3.3.2版本相对于更早期的版本,增加了对Java 5和6的支持,...

    hibernate annotation hibernate3

    Hibernate 3是Hibernate ORM框架的一个重要版本,它引入了许多新特性,如对JPA(Java Persistence API)的支持,以及对注解的广泛使用。这一版本的更新使得Hibernate更加易于使用,同时也提高了代码的可读性和可维护...

    hibernate-Annotation.jar

    新的版本集成了对Annotation的支持,因此,对于新项目来说,直接使用注解进行对象关系映射是最佳实践。同时,Hibernate 4.x和5.x版本还引入了更多的特性,如更完善的缓存机制、更好的性能优化以及对JPA 2.0标准的...

    Hibernate Annotation库

    Hibernate Annotation库是Java开发中用于简化对象关系映射(ORM)的一个重要组件,它使得开发者能够在Java类上直接使用注解来定义数据库映射,从而避免了传统的XML配置文件。这三个特定的jar包是Hibernate ORM框架中...

    Hibernate Annotation入门

    Hibernate 是一款非常流行的Java对象关系映射(ORM)框架,它允许开发者使用面向对象的方式操作数据库。而Hibernate Annotation是Hibernate的一个重要特性,它通过在Java类和字段上添加注解来简化数据库表和实体类...

    Hibernate distribution and annotation

    2. **映射机制**: Hibernate支持XML映射文件(hbm.xml)和注解映射两种方式,让对象与数据库表之间建立映射关系。 3. **Session和Transaction**: Session是Hibernate的主要工作单元,负责保存、更新和检索对象。...

    Hibernate中文文档+hibernate annotation +distribution

    其次,hibernate-annotations-3.4.0GA是Hibernate支持JPA(Java Persistence API)的重要组成部分,引入了注解方式来声明对象与数据库表之间的映射关系。例如,`@Entity`表示一个类作为数据库中的表,`@Table`定义...

    hibernate annotation学习文档

    Hibernate 支持多种注解(Annotation),使得开发人员能够更加灵活地定义实体类与数据库表之间的映射关系。本文档旨在帮助开发者深入了解 Hibernate 注解的基本概念及其应用场景。 #### 二、环境搭建 1. **下载...

    Hibernate Annotation笔记

    随着Java 5的发布及其对注解的支持,Hibernate引入了一种全新的配置方式——注解配置。 ##### 1. 传统的Hibernate配置方法 传统的Hibernate配置依赖于外部XML文件来进行数据库映射。这些映射通常被定义为一组XML...

    hibernate _annotation 注解编程

    ### Hibernate Annotation注解编程知识点详解 #### 一、概述与设置环境 - **概述**:Hibernate 是一个流行的 Java 持久层框架,它提供了一种面向对象的方式来处理数据库操作。Hibernate 支持多种元数据定义方式,...

    hibernate_annotation_中文帮助文档

    - **主键映射**:`@Id`用于标记主键,`@GeneratedValue`控制自增策略。 - **继承关系映射**:`@Inheritance`定义了不同的继承策略,如单表、每个类一张表或连接子类等。 - **关联关系映射**:`@OneToOne`、`@...

    sping hibernate Annotation(注释配置) demo(例子)

    在 `S_H_Annotation` 文件中,应当包含具体的 Java 源码、数据库脚本、配置文件,甚至可能有 Flex 的 MXML 和 ActionScript 代码。通过分析这些文件,你可以更深入地理解如何将 Spring 的注解配置与 Hibernate 结合...

    Hibernate Annotation 学习笔记

    - **多对多关联 (@ManyToMany)**: 两个实体之间有多对多关系,`@ManyToMany`配合`@JoinTable`定义中间表的映射。 5. **继承与@EntityInheritance** - Hibernate支持单表继承(Single Table Inheritance, STI)、...

    hibernate Annotation

    Hibernate作为JPA的实现之一,支持JPA规范,允许开发者使用JPA注解进行对象持久化。JPA注解使代码更加简洁,且与容器集成更加方便。 三、Annotation具体介绍 1. @Entity:标识一个Java类为实体类,表示该类的对象将...

    Hibernate用UUID作为主键的Demo

    通过提供对象-关系映射,Hibernate允许开发者将数据库操作转换为对Java对象的操作,从而减少了编写SQL语句的工作量。 ### 2. 为什么选择UUID作为主键 - **全局唯一性**:UUID生成的键值在全世界范围内都是唯一的,...

    hibernate annotation

    在Hibernate中,注解(Annotation)是用于替代传统XML配置的一种方式,使得对象模型与数据库表的映射关系更加直观和简洁。本文将深入探讨Hibernate注解的相关知识点,并通过实例来阐述其用法。 ### 1. Hibernate...

    hibernate_annotation中文版

    而Hibernate Annotation则是Hibernate框架中的一个重要组成部分,它引入了注解来声明对象与数据库表之间的映射关系,使得代码更加简洁,易于理解和维护。本文将详细解析Hibernate Annotation的相关知识,旨在为使用...

    hibernate_reference-annotation

    - **JPA支持**:由于 Hibernate 使用了 JPA 标准的一部分,因此也需要相应的 JPA 库支持。 ##### 2.2 配置 - **pom.xml 或 build.gradle 文件**:在 Maven 或 Gradle 项目的构建文件中添加 Hibernate 和 JPA 相关...

    hibernate的中所有关系映射(分别用xml和jpa实现)

    hibernate的中关系映射分为一对一、一对多、多对一、多对多,其中有单双向之分。而一对一还有主键和外键区分。一共是九种。分别用xml配置文件和annotation实现。annotation的版本没有写测试程序,见谅。

    Hibernate_学习笔记.

    - **xml方式:映射文件**:通过`<many-to-one>`标签进行映射。 - **annotation**:使用`@ManyToOne`注解进行映射。 - **一对多-单向** - **对象模型**:表示一个对象与多个对象之间的关系。 - **关系模型**:在...

Global site tag (gtag.js) - Google Analytics