`
smiky
  • 浏览: 254169 次
  • 性别: Icon_minigender_1
  • 来自: 天门
社区版块
存档分类
最新评论

one-to-one关联(唯一外键关联)

阅读更多

唯一外键一对一关联是多对一关联的一种特例。在子表中,相同的外键只能出现一次,从而保证一对一

本例的关键在于many-to-one与one-to-one中property-ref这个属性含义的了解

1.实体类

这里以顾客与房间为例(一个顾客只能住一个房间):

Customer类:

public class Customer {

	private int customerId;
	private String customerName;
	private Room room;
	
	public Room getRoom() {
		return room;
	}
	public void setRoom(Room room) {
		this.room = room;
	}
	public int getCustomerId() {
		return customerId;
	}
	public void setCustomerId(int customerId) {
		this.customerId = customerId;
	}
	public String getCustomerName() {
		return customerName;
	}
	public void setCustomerName(String customerName) {
		this.customerName = customerName;
	}
}

 Room:

public class Room {

	private int roomId;
	private String roomName;
	private Customer customer;
	public int getRoomId() {
		return roomId;
	}
	public void setRoomId(int roomId) {
		this.roomId = roomId;
	}
	public String getRoomName() {
		return roomName;
	}
	public void setRoomName(String roomName) {
		this.roomName = roomName;
	}
	public Customer getCustomer() {
		return customer;
	}
	public void setCustomer(Customer customer) {
		this.customer = customer;
	}
	
	
}

 2.映射文件

customer.hbm.xml

<hibernate-mapping package="org.zengge.hibernate.onetoone.pojo">
	<class name="Customer" table="customer">
		<id name="customerId" type="integer">
			<generator class="native" />
		</id>
		<property name="customerName" type="string"/>
		<many-to-one name="room" class="Room" column="roomId" unique="true"/>
		<!-- 
			property-ref: (可选) 指定关联类的一个属性,这个属性将会和本外键相对应。 如果没有指定,会使用对方关联类的主键。 
			也就是说默认Customer的外键与Room的主键相关联,如果外键要与Room的其它属性相关联就必须指定一个Room类中的属性。
		 -->
	</class>
</hibernate-mapping>

 对于many-to-one:

name:与外键相关联的属性名

class:相关联的类名

column:many-to-one会在子表中新建一个外键列,用于指定外键名

unique:表示为该列添加唯一性约束

 

Room.hbm.xml

<hibernate-mapping package="org.zengge.hibernate.onetoone.pojo">
	<class name="Room" table="room">
		<id name="roomId" type="integer">
			<generator class="native"></generator>
		</id>
		<property name="roomName" type="string" ></property>
		<one-to-one name="customer" class="Customer" property-ref="room"></one-to-one>
		<!-- 
			这里的property-ref=room指定的是Customer类中与Room关联的属性,而不是表中的,所以不是roomId
			property-ref: (可选) 指定关联类的属性名,这个属性将会和本类的主键相对应。如果没有指定,会使用对方关联类的主键。
			在Customer类中room对应表中的roomId,那么就是说用Customer中的外键roomId与Room中的主键roomId相关联。如果没指定,
			就会将roomId与customerId关联,这样显然是不对的
		 -->
	</class>
</hibernate-mapping>

 one-to-one:

name表示相关联的属性名

class表示相关联的类名

property-ref(上面己讲),这个是关键,切记它指定的是相关联的类中的属性,而不是表中的列名

 

3.hibernate.cfg.xml

<hibernate-configuration>
  <session-factory>
  	<property name="connection.username">root</property>
  	<property name="connection.password">root</property>
  	<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  	<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
  	<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
  	<property name="show_sql">true</property>
  	<property name="hbm2ddl.auto">update</property>
  	<mapping resource="org/zengge/hibernate/onetoone/pojo/Customer.hbm.xml"/>
  	<mapping resource="org/zengge/hibernate/onetoone/pojo/Room.hbm.xml"/>

  </session-factory>
</hibernate-configuration>

 4.测试

public void testSave(){
		
		Session session = HibernateUtils.getSession();
		Transaction tr = session.beginTransaction();
		Room room = new Room();
		room.setRoomName("moon");
		Customer customer = new Customer();
		customer.setCustomerName("sky");
		session.save(room);
		customer.setRoom(room);
		session.save(customer);
		tr.commit();
		
	}
分享到:
评论

相关推荐

    hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向

    hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向

    Hibernate关联映射-one to one单向外键关联

    NULL 博文链接:https://zhouhaitao.iteye.com/blog/1171227

    Many-to-one关联映射

    关联映射的本质: 将关联关系映射到数据库,所谓的...&lt;many-to-one&gt;会在多的一端加入一个外键,指向一的一端,这个外键是由&lt;many-to-one&gt; 中的column属性定义的,如果忽略了这个属性那么默认的外键与实体的属性一致

    Hibernate学习笔记

    020 &lt;one-to-one&gt;、&lt;many-to-one&gt;单端关联上的 lazy(懒加载)属性 021 继承关联映射 022 component(组件)关联映射 023 复合主键 关联映射 024 其它 关联映射 025 hibernate 悲观锁、乐观锁 026 hibernate 操作树形...

    hibernate一对多例子

    hibernate一对多例子 一对多关联 通过外键 连接两个类对应的表,而没有中间集合表。 这个关系模型失去了一些Java集合的语义: 一个被包含的实体的实例只能被包含在一个... &lt;one-to-many&gt;标记指明了一个一对多的关联。

    Java的Hibernate框架中的双向主键关联与双向外键关联

    Hibernate想要实现双向的关联就必须在映射文件的两端同时配置&lt;one&gt;,另外还要在主映射的一端采用foreign外键关联属性,下面我们就一起来看一下Java的Hibernate框架中的双向主键关联与双向外键关联方法:

    Hibernate_Annotation关联映射

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

    hibernate学习笔记

    hibernate一对一唯一外键关联映射(单向关联Person----&gt;IdCard) 10 hibernate一对一唯一外键关联映射(双向关联Person&lt;----&gt;IdCard) 11 session flush测试(hibernate_session_flush) 12 hihernate一对多关联映射...

    hibernate annotation帮助文档

    一对一(One-to-one) 2.2.5.2. 多对一(Many-to-one) 2.2.5.3. 集合类型 2.2.5.4. 用cascading实现传播性持久化(Transitive persistence) 2.2.5.5. 关联关系获取 2.2.6. 映射复合主键与外键 2.2.7. 映射二级表...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted collections) 6.3.2. 双向关联(Bidirectional associations) 6.3.3. 双向关联...

    unidirectional-one2one-foreignkey:该存储库正在存储有关Hibernate映射示例的源代码-一对一-one source code

    Hibernate映射-单向关联 外键一对一关联 在此示例中,我创建两个表:人员和地址。 这两个表都有一个自动递增的id作为主键。 人员表持有地址表中的外键。

    HibernateAPI中文版.chm

    6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted collections) 6.3.2. 双向关联(Bidirectional associations) 6.3.3. 双向关联...

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

    6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted collections) 6.3.2. 双向关联(Bidirectional associations) 6.3.3. 双向关联...

    Hibernate3的帮助文档

    7.2.5. 一对多关联(One-to-many Associations) 7.3. 高级集合映射(Advanced collection mappings) 7.3.1. 有序集合(Sorted collections) 7.3.2. 双向关联(Bidirectional associations) 7.3.3. 三重关联...

    hibernate 框架详解

    一对多关联(One-to-many Associations) 7.3. 高级集合映射(Advanced collection mappings) 7.3.1. 有序集合(Sorted collections) 7.3.2. 双向关联(Bidirectional associations) 7.3.3. 三重关联...

    hibernate3.04中文文档.chm

    7.2.5. 一对多关联(One-to-many Associations) 7.3. 高级集合映射(Advanced collection mappings) 7.3.1. 有序集合(Sorted collections) 7.3.2. 双向关联(Bidirectional associations) 7.3.3. 三重关联...

    jdbc基础和参考

    many-to-one:标签中对于cascade的取值delete,delete-orphan,all-delete-orphan(只用unique属性值不为true不能出现)慎用 cascade:级联属性 none:不做任何级联操作 save-update:对当前对象执行save,update, ...

    Hibernate教程

    7.2.5. 一对多关联(One-to-many Associations) 7.3. 高级集合映射(Advanced collection mappings) 7.3.1. 有序集合(Sorted collections) 7.3.2. 双向关联(Bidirectional associations) 7.3.3. 三重关联...

    Hibernate中文详细学习文档

    6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted collections) 6.3.2. 双向关联(Bidirectional associations) 6.3.3. 双向关联...

    hibernate annotation 中文文档

    一对一(One-to-one) 2.2.5.2. 多对一(Many-to-one) 2.2.5.3. 集合类型 2.2.5.4. 用cascading实现传播性持久化(Transitive persistence) 2.2.5.5. 关联关系获取 2.2.6. 映射复合主键与外键 2.2.7. 映射二级表...

Global site tag (gtag.js) - Google Analytics