hibernate關於constrained="true"的使用(一對一關係)

1.一對一關係java

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
	<class name="com.huangliusong.entity.one2one.Departments" table="departments_">
		<id name="d_id" type="java.lang.Integer">
			<column name="d_id"></column>
			<!-- 指定使用哪一個主鍵生成主鍵 使用外鍵的方式生成主鍵 -->
			<generator class="foreign">
				<!-- property屬性指定使用當前持久化類的哪個屬性的主鍵做爲外鍵 -->
				<!--property屬性執行使用當前哪一個持久化的類的哪一個屬性做爲外鍵 指定當前持久化類的哪一個屬性做爲主鍵 -->
				<param name="property"></param>
			</generator>
		</id>
		<property name="d_name" type="java.lang.String"></property>
	
		<!--一對一關係 constrained="true"表示 -->
		<one-to-one name="mgr" class="com.huangliusong.entity.one2one.Manegers"
			constrained="true"></one-to-one>
	</class>
</hibernate-mapping>

2.constrained="true"sql

表示:constrained屬性在hibernate一對一關係中會用到,hibernate文檔中是這麼寫的,constrained(約束),只能在one-to-one的映射中使用,通常在主表映射中,有外鍵的那個表,若是constrained=true,則代表存在外鍵與關聯表對應,而且關聯表中確定存在對應的鍵與其對應,另外,改選項最關鍵的是影響save和deleted前後順序,若是是增長的時候,若是constrained=true則會增長關聯表,而後增長本表,刪除的時候是先伸出本表而後刪除關聯的表app

 

one-to-one的單向關聯中,若是constrained=false則會在查詢的時候所有取出來,用left outer join的方式 若是constrained=true,hibernate會延遲加載sql,只會把主表查詢出來,等有用到關聯表的時候再發出sql語句去取出來spa

 

one-to-one的雙向關聯,必須設置constrained=true 要否則會出現重複讀數據,若是2個表中user,car 在false時候的sql語句以下.net

select * from user 
a left outer join 
car b on a.id=b.id 
left outer join on user
 c on a.id=c.id where a.id=?

刪除的時候最好刪除從表,刪除主表會先查詢下主表,在聯合查詢下。hibernate

相關文章
相關標籤/搜索