`

双向一对一关联

 
阅读更多

Annotation方法

 

Tables structure

'CREATE TABLE `address` (
  `addressID` int(11) NOT NULL,
  `addressName` varchar(45) NOT NULL,
  PRIMARY KEY (`addressID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8'

 

'CREATE TABLE `person` (
  `id` int(11) NOT NULL,
  `name` varchar(45) NOT NULL,
  `addressID` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8'

 

Person类

 

package hibernate.entities;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;

@Entity
public class Person {
	private int id;
	private String name;
	private Address address;
	
	@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;
	}
	
	@OneToOne
	@JoinColumn(name="addressID")
	public Address getAddress() {
		return address;
	}
	public void setAddress(Address address) {
		this.address = address;
	}
}

 

 

Address类

 

package hibernate.entities;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;

@Entity
public class Address {
	private int addressID;
	private String addressName;
	private Person person;
	
	@Id
	@GeneratedValue
	public int getAddressID() {
		return addressID;
	}
	public void setAddressID(int addressID) {
		this.addressID = addressID;
	}
	public String getAddressName() {
		return addressName;
	}
	public void setAddressName(String addressName) {
		this.addressName = addressName;
	}
	
	@OneToOne(mappedBy="address")
	public Person getPerson() {
		return person;
	}
	public void setPerson(Person person) {
		this.person = person;
	}
	
	
}

 

 

 

XML配置方法

 husband表

'CREATE TABLE `husband` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  `wifeID` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`),
  KEY `FK_7hkddxc8rvd25jlebv327ewj8` (`wifeID`),
  CONSTRAINT `FK_7hkddxc8rvd25jlebv327ewj8` FOREIGN KEY (`wifeID`) REFERENCES `wife` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8'

 

wife表

'CREATE TABLE `wife` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8'

 

 

Husband类

package hibernate.entities;

public class Husband {
	private int id;
	private String name;
	private Wife wife;
	
	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;
	}
	public Wife getWife() {
		return wife;
	}
	public void setWife(Wife wife) {
		this.wife = wife;
	}
	
	
}

 

Wife类

package hibernate.entities;

public class Wife {
	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;
	}
	
	
}

 

 

Husband.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="hibernate.entities">
    <class name="Husband" table="husband">
       <id name="id" column="id">
       	<generator class="native"></generator>
       </id>
       
       <property name="name"></property>
       
       <many-to-one name="wife" column="wifeID" unique="true"></many-to-one>
    </class>
</hibernate-mapping>

 

Wife.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="hibernate.entities">
    <class name="Wife" table="wife">
       <id name="id" column="id">
       	<generator class="native"></generator>
       </id>
       
       <property name="name" column="name"/>
       
       <one-to-one name="husband" property-ref="wife"></one-to-one>
       
    </class>
</hibernate-mapping>

 

分享到:
评论

相关推荐

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

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

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

    在这个“Hibernate双向一对一关联映射(XML版)”的主题中,我们将深入探讨如何通过XML配置文件实现两个实体之间的一对一关系。 首先,我们需要理解一对一关联的概念。在数据库中,一对一关联意味着两个表中的每一...

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

    双向一对一关联的好处在于简化了代码,提高了可读性和可维护性。开发人员可以从任一侧直接获取关联的对象,无需额外的查询操作。然而,需要注意的是,由于这种关联是双向的,所以在处理关联关系时,要特别注意同步两...

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

    在上述例子中,我们创建了双向一对一关联。这意味着可以从`EntityA`访问到`EntityB`,也可以从`EntityB`访问到`EntityA`。双向关联可以方便我们在业务逻辑中进行操作,但同时也需要注意维护关联的完整性,避免出现...

    hibernate 双向一对一基于主键的关联映射

    在双向一对一关联中,需要注意的是,当更新或保存一个实体时,必须同时更新另一个实体,以保持数据的一致性。否则,可能会出现数据不一致的情况。 ### 6. 文件`bionetoonetable` 在提供的压缩包文件`...

    hibernate 双向一对一基于外键的关联映射

    双向一对一关联则意味着双方实体都可以互相引用对方。在本案例中,我们将探讨如何在Hibernate中实现基于外键的双向一对一关联映射。 首先,我们来看一下双向一对一关联的基本概念。双向一对一关联意味着两个实体类A...

    hibernate表之间3种双向关联映射

    最后,我们讨论双向一对一关联映射(BidirectionalOneToOne)。这种关系中,两个实体类之间存在一对一的联系,即每个实体最多只能有一个匹配的实体。这可以分为两种情况:外键关联(BidirectionalOneToOneFK)和主键...

    hibernate一对一唯一外键关联映射(双向关联)

    在双向一对一关联中,每个实体都需要有一个引用指向对方的属性。具体实现方法是在两个类中都添加`@OneToOne`注解,并设置`mappedBy`属性,指出被引用的一方。 ### 4. Hibernate配置 在Hibernate配置文件(如`...

    JPA_2_一对多双向关联关系

    **JPA 2 一对多双向关联关系** Java Persistence API(JPA)是Java平台上的一个标准,用于处理对象关系映射(ORM),使得开发者可以使用面向对象的方式操作数据库。在JPA中,一对多关联关系是常见的实体间关系类型...

    JPA中的一对一双向关联

    在Java Persistence API (JPA) 中,一对一双向关联是一种关系映射,它允许两个实体类之间存在一对一的关系,并且每个实体都能引用对方。这种关联是双向的,意味着每个实体都可以通过自己的属性访问到另一个实体。...

    JPA学习总结(二)--JPAOneToOne双向关联

    我们将会深入理解JPA如何处理双向一对一关联,并通过一个示例来阐述其工作原理。 **双向一对一关联的定义** 在JPA中,`@OneToOne`注解可以用来表示一个实体类对应另一个实体类的唯一实例。而双向一对一关联意味着...

    一对一双向关联映射

    在Java持久化框架Hibernate中,一对一双向关联映射是一种重要的数据对象关系映射策略,它允许我们在数据库中的两个实体之间建立一对一的关系,并且在Java对象模型中可以从任一侧访问另一侧的对象。这种映射方式增加...

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

    在上面的例子中,User和Profile都有对对方的引用,这被称为双向一对一关联。如果不希望在一方有引用,可以去掉`mappedBy`属性,变成单向一对一关联。 6. **外键策略**: Hibernate默认会在被引用的一方(在这里是...

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

    - 虽然一对一关联提供了便利,但过多的一对一关联可能会影响性能,因为每次查询可能涉及多个表,增加数据库访问的复杂性。因此,应谨慎设计实体间的关系。 8. **实例应用** - 在实际项目中,一对一关联常用于用户...

    Hibernate教程04_关系映射之一对一单向外键关联

    若双方都知道对方,称为双向一对一关联。 4. **配置XML映射文件**:如果不使用注解,可以在.hbm.xml文件中定义映射,使用标签来配置一对一关系。 5. **持久化操作**:使用SessionFactory创建Session,通过Session...

    Hibernate ORM - 一对多双向关联关系

    标题“Hibernate ORM - 一对多双向关联关系”指的是在数据库建模中,Hibernate ORM(对象关系映射)框架如何处理一个实体类(如User)与多个实体类(如Article)之间的关系。在这种关系中,一个用户可以拥有多个文章...

    hibernate 关联映射(三) one to one(双向)

    在双向一对一关联中,两个实体类会互相引用对方,形成相互的关联。这种关联的配置比单向关联稍复杂,因为它需要在双方都设置引用。 首先,我们需要在两个实体类中定义对应的属性,并用`@OneToOne`注解标记。假设...

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

    在实际应用中,确保在两个实体类间的一对一关联正确无误非常重要。在创建和更新关联时,应避免循环引用和数据不一致的问题。在保存或更新对象时,需确保在双方都进行了正确的设置。 8. **性能考虑**: 一对一双向...

    hibernate一对多,多对一,一对多双向关联

    1. **关联类型:** Hibernate支持四种基本的关联类型,包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)。本主题将主要聚焦在一对一和一对多关联。 2. **关联的方向性:**...

    hibernate关联关系之一对一双向关联

    - 在双向一对一双向关联中,需要注意维护双方的引用,以保持数据的一致性。 - 事务管理时,可能需要使用`CascadeType`来决定是否自动处理关联对象的保存、更新和删除操作。 - 删除一个实体时,必须确保不会违反...

Global site tag (gtag.js) - Google Analytics