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

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

 
阅读更多


继续上面的东西,修改下数据库脚本,把共享主键中的Profile的外键关系单独出来唯一列。

 

数据库脚本(附件)

 

 

//User.java

package com.zyp.examples;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

/**
 * User entity. @author MyEclipse Persistence Tools
 */

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

	// Fields
	private static final long serialVersionUID = 8415887974331463494L;

	@Id
	@GeneratedValue(generator="incrementGenerator", strategy=GenerationType.IDENTITY)
	@GenericGenerator(name="incrementGenerator", strategy="increment")
	@Column(name="id")
	private Integer id;
	
	@Column(name="name")
	private String name;
	
	@Column(name="password")
	private String password;
	
	@OneToOne(targetEntity=Profile.class, fetch=FetchType.EAGER, cascade={CascadeType.ALL}, mappedBy="user")
	private Profile profile;

	// Constructors

	/** default constructor */
	public User() {
	}

	/** full constructor */
	public User(String name, String password) {
		this.name = name;
		this.password = password;
	}

	// Property accessors

	public Integer getId() {
		return this.id;
	}

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

	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return this.password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public Profile getProfile() {
		return profile;
	}

	public void setProfile(Profile profile) {
		this.profile = profile;
	}
	
	

}
 

 

 

//Profile.java

 

package com.zyp.examples;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

/**
 * Profile entity. @author MyEclipse Persistence Tools
 */

@Entity
@Table(name="profile")
public class Profile implements java.io.Serializable {

	// Fields
	private static final long serialVersionUID = -804808825096862895L;
	
	@Id
	@GeneratedValue(generator="incrementGenerator", strategy=GenerationType.IDENTITY)
	@GenericGenerator(name="incrementGenerator", strategy="increment")
	@Column(name="id")
	private Integer id;
	
	@Column(name="email")
	private String email;
	
	@Column(name="address")
	private String address;
	
	@OneToOne(cascade={CascadeType.ALL},fetch=FetchType.EAGER)
	@JoinColumn(name="pid", referencedColumnName="id", unique=true)
	private User user;

	// Constructors

	/** default constructor */
	public Profile() {
	}

	/** minimal constructor */
	public Profile(String email, String address) {
		this.email = email;
		this.address = address;
	}


	// Property accessors

	public Integer getId() {
		return this.id;
	}

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

	public String getEmail() {
		return this.email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getAddress() {
		return this.address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public User getUser() {
		return user;
	}

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


}

 

 

测试类和之前的基于共享主键的测试类是一样的。


真是没明白mappedBy这个属性的含义,还得好好把那些属性的中文含义搞懂。


大家可以交换两个实体类的mappedBy属性,看看出现的错误

分享到:
评论

相关推荐

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

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

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

    本文将详细讲解“Hibernate Annotation 中的共享主键一对一双向关联”。 首先,我们需要理解什么是共享主键(Shared Primary Key)。在一对一的关联关系中,如果两个实体共享同一个主键,那么这种关联被称为共享...

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

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联是常见的关系映射类型,它用于表示两个实体之间存在唯一的对应关系。本篇将详细讲解如何使用Hibernate进行一对一单向外键关联,并且该关联涉及到联合主键的...

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

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

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

    在Hibernate中,一对一关联可以是单向或双向的。在这个场景中,我们讨论的是单向关联,即只有一个实体知道这个关联关系。 **注解方式实现一对一单向外键关联** 1. **定义实体类**:首先,我们需要创建两个实体类,...

    Hibernate_Annotation关联映射

    其中一个实体通过外键关联到另一个实体的主键(注意要模拟一对一关联必须在外键列上添加唯一约束),(3).通过关联表来保存两个实体之间的连接关系(要模拟一对一关联必须在每一个外键上添加唯一约束)。 1.共享主键的...

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

    总之,理解和熟练运用Hibernate的一对多、多对一以及双向关联,是提升Java企业级应用开发效率的关键。通过注解或XML配置,开发者可以灵活地定义实体间的关联,实现数据的持久化。同时,注意级联操作、懒加载策略等...

    Hibernate ORMapping Annotation XML PDF

    一对一双向外键关联与单向外键关联类似,不同之处在于两个实体之间存在双向的导航属性。 **Annotation方式:** ```java @Entity public class Husband { // ... // 一对一,双向外键关联 @OneToOne(mappedBy =...

    hibernate4.3.8的annotation及xml的一对多的双向案例

    XML配置方面,我们需要在`hibernate.cfg.xml`文件中配置数据源、JDBC驱动等基本信息,并在`hibernate-mapping`标签下为每个实体类创建对应的`class`标签,然后定义一对一或一对多的关系。对于一对多关系,可以使用`...

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

    本主题将深入探讨使用Hibernate进行多对多双向关联的实现,既可以通过注解(Annotation)方式,也可以通过XML配置文件来完成。 首先,我们来看多对多关联的基本概念。在数据库设计中,当两个实体之间存在多个实例...

    Hibernate+Annotation.doc

    `mappedBy`在双向一对多或多对一关系中使用,表示关系的维护者。它用于指定哪个实体负责维护关联关系,通常放在不拥有外键的一方。 使用Hibernate的注解,开发者可以更直观地理解对象与数据库的关系,并减少XML...

    Hibernate一对多映射配置详解

    在Java持久化框架Hibernate中,一对多映射是常见的实体关系映射类型,它表示一个实体(例如User)可以与多个其他实体(例如Account)相关联。以下是对Hibernate一对多映射配置的详解: 一、XML文件配置 1. 单向...

    Hibernate+中文文档

    7.4.2. 一对一(one to one) 7.5. 使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多...

    hibernate3.2中文文档(chm格式)

    7.2.2. 一对一(one to one) 7.2.3. 一对多(one to many) 7.3. 使用连接表的单向关联(Unidirectional associations with join tables) 7.3.1. 一对多(one to many) 7.3.2. 多对一(many to one) 7.3.3. ...

    HibernateAPI中文版.chm

    7.2.2. 一对一(one to one) 7.2.3. 一对多(one to many) 7.3. 使用连接表的单向关联(Unidirectional associations with join tables) 7.3.1. 一对多(one to many) 7.3.2. 多对一(many to one) 7.3.3. ...

    Hibernate中文详细学习文档

    7.4.2. 一对一(one to one) 7.5. 使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多...

    Hibernate_学习笔记.

    - **一对一关联映射** - **唯一外键关联-单向**:一个对象有一个唯一的外键指向另一个对象。 - **唯一外键关联-双向**:两个对象互相引用对方。 - **主键关联-单向**:一个对象的主键作为另一个对象的外键。 - *...

    Hibernate 中文 html 帮助文档

    7.4.2. 一对一(one to one) 7.5. 使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多...

Global site tag (gtag.js) - Google Analytics