`
jeonkeen
  • 浏览: 39653 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Hibernate一对一主键关联(基于annotation注解方式)

阅读更多

hibernate中一对一的关联有两种方式:一种是采用外键关联,另外一种是采用主键关联

项目中用到Hibernate(annotation注解方式)构建实体类,其中有一对一主键双向关联。期间遇到一些问题,现在贴出来探讨探讨。 一个帖子内容类(PostText)对应一个帖子信息类(Post),主要目标是在存储帖子或者帖子内容时,关联的对象也被存储。具体代码如下:

 

Post类
@Entity
@Table(name = "posts")
public class Post implements Serializable {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO) //主键生成器
	@Column(name="post_id",unique=true)
	private int id;
	@Column(name ="topic_id",nullable=false)
	private int topicId;
	@Column(name ="forum_id",nullable=false)
	private int forumId;

 

      	@OneToOne(cascade=CascadeType.ALL)
      	@PrimaryKeyJoinColumn//这个注解只能写在主(生成ID)的一端
    	private PostText postText;
	/*相应的get和set方法。。。*/ 
PostText类 

  

@Entity
@Table(name = "jforum_posts_text")
public class PostText implements Serializable {

	@Id
	@GenericGenerator(name ="pkGenerator",strategy="foreign" ,parameters={@Parameter(name="property",value="post")})
	@GeneratedValue(generator="pkGenerator")
	//post_text的ID是根据post的ID来赋值的,这里需要设置ID生成器的策略为foreign,参数中指定post_text的ID是使用post对象中的ID
   	private int id;
	@Column(name ="post_text",nullable=true)
	private String text;
	@Column(name ="post_subject",nullable=true)
	private String subject;
	@OneToOne(cascade=CascadeType.ALL, mappedBy="postText")  // 一对一
	private Post post;
	/*相应的get和set方法。。。*/ 

 写个OneToOnePKTest类:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import cn.edu.dlnu.resources.model.entity.Post;
import cn.edu.dlnu.resources.model.entity.PostText;

public class OneToOnePKTest {
	private static SessionFactory sessionFactory;
 
	@BeforeClass
	public static void beforeClass() {
		sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
	}
	@AfterClass
	public static void afterClass() {
		sessionFactory.close();
	}
 
	@Test
	public void testSave(){
		Session s = sessionFactory.getCurrentSession();
		s.beginTransaction();
  
		Post post = new Post();
		PostText postText = new PostText();
		post.setForumId(1);
		postText.setText("test");


		post.setPostText(postText);
		postText.setPost(post);
		s.save(postText);
		s.getTransaction().commit();
	}

	@Test
	public void testSchemaExport() {
		new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
	}
	public static void main(String[] args) {
		beforeClass();
		new OneToOnePKTest().testSave();
		afterClass();
	}
}

运行testSave(),方法后数据库中post 与 post_text表中记录的主键一致。

 

分享到:
评论
3 楼 motiftear 2013-12-20  
lsw289998792 写道
您好,按照您上面的代码我做了一次,我用的hibernate3.6.0,报Caused by: org.hibernate.id.IdentifierGenerationException: null id generated for:求指教,谢谢,

是不是引包引错了啊,应该都是javax.persistence的
2 楼 zsf513 2012-10-18  
代码有问题,,,,,,,,,
1 楼 lsw289998792 2012-05-09  
您好,按照您上面的代码我做了一次,我用的hibernate3.6.0,报Caused by: org.hibernate.id.IdentifierGenerationException: null id generated for:求指教,谢谢,

相关推荐

    Hibernate Annotation 共享主键一对一双向关联

    在一对一的关联关系中,如果两个实体共享同一个主键,那么这种关联被称为共享主键的一对一关联。这意味着这两个实体的表在数据库中通过主键进行连接,一个实体的主键同时也作为另一个实体的外键。 在Hibernate中,...

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

    在Hibernate中,一对一关联可以通过`@OneToOne`注解来实现。这个注解可以放在属性上,表示该属性对应另一个实体的实例。外键通常设置在关系的“从属”一方,也就是依赖于其他实体的一方。 对于联合主键,我们需要...

    Hibernate一对一双向外键关联(annotation/xml)

    在Java的持久化框架Hibernate中,一对一双向外键关联是一种常见的关系映射方式,用于表示两个实体类之间一对一的关联关系。在这个场景下,每个实体都有一个引用指向另一个实体,形成双向关联。本篇文章将深入探讨...

    Hibernate一对多(多对一)双向关联(annotation/xml)

    本文将深入探讨这两种关联方式在使用Hibernate时的配置,包括基于注解(Annotation)和XML的方式。 1. **一对多关联**(Many-to-One) - 在这种关系中,一个实体可以对应多个其他实体。例如,一个班级可以有多个...

    hibernate _annotation 注解编程

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

    Hibernate Annotation 唯一外键一对一双向关联

    唯一外键是指在一对一关联中,一方的主键同时也作为另一方的外键,确保两个实体共享同一个ID。这可以通过在没有`@JoinColumn`的情况下让两个实体共享相同的主键生成策略来实现。例如,使用`GenerationType.IDENTITY`...

    Hibernate多对多单向关联(annotation/xml)

    本篇将详细讲解如何使用Hibernate实现多对多单向关联,包括注解(Annotation)和XML配置方式。 一、多对多关联的基本概念 多对多关联意味着一个实体可以与多个其他实体关联,反之亦然。例如,学生和课程的关系,一...

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

    本文将深入探讨如何使用Hibernate注解实现基于外键的一对多双向关联。我们将通过具体实例来解析这个主题,并结合源码分析其工作原理。 首先,我们要明白一对多关联意味着一个实体可以拥有多个关联的实体。在数据库...

    hibernate-Annotation.jar

    在Hibernate 3.x版本中,引入了Annotation注解,这是一种元数据的方式,可以替代XML配置文件来描述对象与数据库表之间的映射关系。 **Hibernate Annotation注解** 在Hibernate 3.x之前,对象到数据库的映射通常...

    hibernate annotation hibernate3

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

    Spring_Hibernate_JAVAX_Annotation注解

    ### Spring_Hibernate_JAVAX_Annotation 注解详解 #### 一、概述 本文将详细介绍与SSH(Spring+Struts+Hibernate)开发相关的注解。这些注解覆盖了多个领域,如AspectJ、Batch处理、Spring框架本身的功能(包括...

    Hibernate distribution and annotation

    标题“Hibernate distribution and annotation”涉及到的是Hibernate ORM框架的一个特定版本及其相关的注解功能。Hibernate是一个流行的Java对象关系映射(ORM)工具,它允许开发者使用面向对象的编程模型来操作...

    Hibernate_Annotation关联映射

    使用@OneToOne注解建立实体Bean之间的一对一关联。一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键(注意要模拟一对一关联必须在外键列上添加唯一约束),(3)...

    Hibernate Annotation 笔记 总结 注解

    Hibernate Annotation是Hibernate框架的一个重要特性,它允许开发者直接在Java类上使用注解来定义对象的数据库映射,从而避免了传统的XML配置文件。这种做法提高了代码的可读性和维护性,同时也使得开发流程更为简洁...

    详解Hibernate一对一映射配置

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

    最全的Hibernate Annotation API文档

    在Hibernate中,注解(Annotation)是一种声明式的方法,用于配置实体类、属性以及它们与数据库表之间的映射关系。本文将深入探讨“最全的Hibernate Annotation API文档”中的关键知识点。 一、实体类(Entity) 在...

    hibernate annotation 中文文档

    - **2.2.5.1 一对一(One-to-one)**:使用 `@OneToOne` 注解来定义两个实体Bean之间的一对一关联关系。 - **2.2.5.2 多对一(Many-to-one)**:使用 `@ManyToOne` 注解来定义多对一的关联关系。 - **2.2.5.3 ...

    ssh2 Annotation注解 框架+oracle

    在"ssh2 Annotation注解 框架+oracle"的场景下,我们将深入探讨SSH2框架如何结合注解和Oracle数据库进行应用开发。 **Spring Annotation注解** Spring框架允许开发者使用注解来声明Bean、依赖注入、事务管理等。...

Global site tag (gtag.js) - Google Analytics