`

hibernate一对一关系(组件)映射

阅读更多
1.一对一单向外键关联:
package yingjun.model;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Husband {
	private int id;
	private String name;
	private Date birthday;
    private Wife wife;
    
    @Id
    @GeneratedValue
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Temporal(TemporalType.DATE) //改变为yyyy-mm-dd(默认为yyyy-mm-dd hh:mm:ss)
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	@OneToOne         //设定对应关系
	@JoinColumn(name="wifeid")  //外键
	public Wife getWife() {
		return wife;
	}
	public void setWife(Wife wife) {
		this.wife = wife;
	}
	
}
 
package yingjun.model;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Wife {
	private int id;
	private String name;
	private Date birthday;
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Temporal(TemporalType.DATE) 
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	
}
create table Husband (
        id integer not null auto_increment,
        birthday date,
        name varchar(255),
        wifeid integer,
        primary key (id)
    )

    create table Wife (
        id integer not null auto_increment,
        birthday date,
        name varchar(255),
        primary key (id)
    )

    alter table Husband 
        add index FKAEEA401BF57AD616 (wifeid), 
        add constraint FKAEEA401BF57AD616 
        foreign key (wifeid) 
        references Wife (id)
 2.一对一双向外键关联:
package yingjun.model;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Husband {
	private int id;
	private String name;
	private Date birthday;
    private Wife wife;
    
    @Id
    @GeneratedValue
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Temporal(TemporalType.DATE) //改变为yyyy-mm-dd(默认为yyyy-mm-dd hh:mm:ss)
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	@OneToOne         //设定对应关系
	@JoinColumn(name="wifeid")  //外键
	public Wife getWife() {
		return wife;
	}
	public void setWife(Wife wife) {
		this.wife = wife;
	}
	
}
 
package yingjun.model;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Wife {
	private int id;
	private String name;
	private Date birthday;
	private Husband hudband;
	
	@OneToOne(mappedBy="wife")//告诉已经建立关联,不用建立冗余外键
	public Husband getHudband() {
		return hudband;
	}
	public void setHudband(Husband hudband) {
		this.hudband = hudband;
	}
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Temporal(TemporalType.DATE) 
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	
}

 生成的建表语句和一对一单项外键关联相同即在数据库的表现一样,区别在java程序里面的husband和wife可以互相联系
  3.联合主键关联:
package yingjun.model;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity

@IdClass(HusbandPK.class) //指定联合主键
public class Husband {
	private int id;
	private String name;
	private Date birthday;
   
    
    @Id
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	@Id
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Temporal(TemporalType.DATE) //改变为yyyy-mm-dd(默认为yyyy-mm-dd hh:mm:ss)
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	
	
}
 
package yingjun.model;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Wife {
	private int id;
	private String name;
	private Date birthday;
	private Husband hudband;
	
	@OneToOne
	@JoinColumns({
		                 @JoinColumn(name="husbandid",referencedColumnName="id"),
		                 @JoinColumn(name="husbandname",referencedColumnName="name") 
		          })
	public Husband getHudband() {
		return hudband;
	}
	public void setHudband(Husband hudband) {
		this.hudband = hudband;
	}
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Temporal(TemporalType.DATE) 
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	
}
 
package yingjun.model;

public class HusbandPK {
	private int id;
	private String name;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
 
 create table Husband (
        id integer not null,
        name varchar(255) not null,
        birthday date,
        primary key (id, name)
    )

    create table Wife (
        id integer not null auto_increment,
        birthday date,
        name varchar(255),
        husbandid integer,
        husbandname varchar(255),
        primary key (id)
    )

    alter table Wife 
        add index FK292331E40F5A5E (husbandid, husbandname), 
        add constraint FK292331E40F5A5E 
        foreign key (husbandid, husbandname) 
        references Husband (id, name)
 3.组件映射
package yingjun.model;

import java.util.Date;

import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Husband {
	private int id;
	private String name;
	private Date birthday;
    private Wife wife;
    @Id
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Temporal(TemporalType.DATE) //改变为yyyy-mm-dd(默认为yyyy-mm-dd hh:mm:ss)
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	@Embedded  //将wife的内容嵌入进来作为自己的一部分
	public Wife getWife() {
		return wife;
	}
	public void setWife(Wife wife) {
		this.wife = wife;
	}
	
	
}
 
package yingjun.model;

import java.util.Date;
public class Wife {
	
	private String wifename;
	private Date wifebirthday;


	
	public void setWifebirthday(Date wifebirthday) {
		this.wifebirthday = wifebirthday;
	}
	public Date getWifebirthday() {
		return wifebirthday;
	}
	public void setWifename(String wifename) {
		this.wifename = wifename;
	}
	public String getWifename() {
		return wifename;
	}
	
}
 
create table Husband (
        id integer not null,
        birthday date,
        name varchar(255),
        wifebirthday datetime,
        wifename varchar(255),
        primary key (id)
    )
 
 
分享到:
评论

相关推荐

    Hibernate组件映射(annotation/xml)

    1. 数据库设计简化:组件映射可以避免创建过多的一对多或一对一关联表,简化数据库结构。 2. 代码复用:组件类可以在多个实体中重复使用,提高代码的可重用性。 3. 更强的类型安全:相比直接使用基本类型或字符串,...

    hibernate对象关系映射实例

    “对应关系有一对一,多对一,多对多”则提示我们将深入学习这三种常见的数据库关联关系在Hibernate中的实现方式。 **Hibernate ORM详解** Hibernate是Java平台上的一个开源ORM框架,它通过提供数据持久化服务,...

    hibernate组件之间的关联

    在 Hibernate 中,组件之间的关联是实现对象模型与数据库表之间映射的关键部分,它包括了一对一、一对多、多对一、多对多等多种关联类型。本篇文章将深入探讨 Hibernate 组件之间的关联机制及其应用。 **一对一关联...

    Spring+Hibernate 自动映射

    标题中的“Spring+Hibernate 自动映射”是指在Java Web开发中,利用Spring框架与Hibernate ORM工具进行数据层的整合,实现对象关系映射(ORM)的自动化处理。这一技术结合了Spring的强大依赖注入(DI)和事务管理...

    hibernate复杂关系的映射

    这种复杂的映射关系展示了Hibernate的强大之处,它可以处理一对多、多对一、多对多等各种复杂关系,并且能够将对象的复杂结构(如组件和嵌套对象)映射到关系数据库中。通过这种方式,开发人员可以专注于业务逻辑,...

    hibernate对象关系映射案例demo

    这只是一个起点,深入学习Hibernate,还可以掌握更多的高级特性,如懒加载、级联操作、多对一、一对多、多对多关系映射等。在实际项目中,理解并熟练运用Hibernate,可以显著提升开发效率,降低项目维护成本。

    HIBERNATE - 符合Java习惯的关系数据库持久化

    3. **一对一关联**:两个实体之间存在唯一对应关系。 4. **多对多关联**:两个实体之间存在多对多的关系,通常需要通过关联表来实现。 #### 结论 Hibernate通过提供强大的对象关系映射功能,极大地简化了Java应用...

    开源对象关系映射框架Hibernate知识培训

    标题和描述都在强调"开源对象关系映射框架Hibernate知识培训",这意味着主要内容将围绕Hibernate这一框架,探讨如何进行对象关系映射(ORM)以及相关的学习和应用。 **对象关系映射(ORM)** 对象关系映射(Object...

    springmvc+hibernate多表映射

    在多表映射中,Hibernate允许我们定义实体类之间的关系,如一对一、一对多、多对一和多对多关系。 在“一对多”关系中,一个实体可以对应多个其他实体。例如,一个部门可以有多个员工。在Hibernate中,我们通过在...

    hibernate中的相关组件的介绍

    - **关联映射**:描述了不同POJO类之间的关联关系,例如一对多、多对多等。 #### 四、查询语言 Hibernate提供了丰富的查询语言支持,主要包括HQL(Hibernate Query Language)和Criteria API。 - **HQL**:类似于...

    Hibernate教程17_继承映射

    在Java世界中,ORM(对象关系映射)框架如Hibernate极大地简化了数据库操作。本教程主要探讨的是Hibernate中的“继承映射”特性,这是一项关键功能,它允许我们将复杂的类继承结构映射到数据库表中。通过继承映射,...

    component(组件映射)

    3. **关联(Association)**:组件也可以通过一对一或一对多关联映射到单独的表,这种情况下称为关联组件(Associated Component)。 **组件映射的优势:** 1. **代码结构清晰**:组件映射有助于保持代码的模块化,...

    深入理解hibernate映射文件

    ### 深入理解Hibernate...总之,Hibernate映射文件是实现对象关系映射的核心组件之一,通过对映射文件的合理配置,可以高效地完成Java对象与数据库表之间的映射,从而简化数据库操作并提高代码的可维护性和可扩展性。

    hibernate中文参考文档

    18. 示例:不同的映射:除了父子关系映射,还可能有其他类型的映射,如多对多关系映射、一对一关系映射等。这里应该会介绍如何处理这些复杂的映射场景。 19. 最佳实践:最后,文档将总结Hibernate开发中的一些最佳...

    对象关系映射,并持久化到数据库的开源组件

    Hibernate 是一种OR/M(object relation mapping)对象关系映射工具,是一个可以自动的根据xml 完成 对象关系映射,并持久化到数据库的开源组件,是对JDBC 的封装,主要负责java 对象的持久化.。 对象序列化适应临时...

    对Hibernate配置文件中的映射元素详解

    此外,Hibernate还支持组件映射,通过`component`元素,可以将对象的内部结构映射到单独的数据库表或表的一部分。组件可以包含属性、其他组件甚至集合。`component`元素的`name`属性指定了属性名,`class`属性是组件...

    Hibernate_code

    5. **Hibernate_Component**:这部分可能包含了Hibernate组件映射的示例。组件是对象的一部分,可以被嵌入到其他对象中,类似于数据库中的复合类型。通过@Component或@Embeddable注解,可以将一个类声明为组件,并在...

    简单的HIBERNATE应用

    Hibernate是Java开发中的一款非常流行的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互,使得开发者可以更加专注于业务逻辑而不是繁琐的数据访问层代码。在这个“简单的Hibernate应用”中,我们将...

Global site tag (gtag.js) - Google Analytics