hibernate中關系映射的配置問題
阿新 • • 發佈:2019-04-24
key gen nal count constrain dom rain upd ping
部門和員工屬於一對多的關系
員工的賬戶屬於一對一關系
賬戶和權限屬於多對多關系
department.hbm.xml
1 <hibernate-mapping> 2 <class name="com.demo.first.domain.Department" table="department"> 3 <id name="did" column="did"> 4 <generator class="native"/> 5 </id> 6 <property name="name" column="name"/> 7<property name="description" column="description"/> 8 <set name="employeeSet" inverse="true" cascade="save-update"> 9 <!-- 外鍵的名稱(字段名):也就是說如果是一對多的關系,那麽會在多的一方生成的外鍵名稱是 column 中的值, 10 這個值是可以改變的,建議和對應的名稱一致 --> 11 <key column="wj_id"></key> 12<one-to-many class="com.demo.first.domain.Employee"/> 13 </set> 14 </class> 15 </hibernate-mapping>
employee.hbm.xml
1 <hibernate-mapping> 2 <class name="com.demo.first.domain.Employee" table="employee"> 3 <id name="eid" column="eid"> 4<generator class="foreign"><!-- 直接將主鍵和外鍵進行關聯,主鍵同時作為外鍵使用,在 hibernate 中 one-to-one 沒辦法在代碼中體現出新字段名,可以使用many-to-one來生成一個字段,也可以使用此方法來生成外鍵 --> 5 <param name="property">userAccount</param> 6 </generator> 7 </id> 8 <property name="name" column="name" length="20"/> 9 <property name="gender" column="gender"/> 10 <property name="birthday" column="birthday"/> 11 <property name="description" column="description"/> 12 <one-to-one name="userAccount" class="com.demo.first.domain.UserAccount" constrained="true" cascade="save-update"/> 13 <!-- 和 department 中配置 column 的名稱是一樣的,需要對應 --> 14 <many-to-one name="department" class="com.demo.first.domain.Department" column="wj_id"/> 15 </class> 16 </hibernate-mapping>
privilege.hbm.xml
1 <hibernate-mapping> 2 <class name="com.demo.first.domain.Privilege" table="privilege"> 3 <id name="pid" column="pid"> 4 <generator class="native"/> 5 </id> 6 <property name="action"/> 7 <set name="userAccountSet" table="userAccount_privilege"> 8 <!-- 和一對多一樣的操作,column 是在生成的字段名(外鍵),是可以改變的,多對多的關系中,會生成一個中間表,那麽在 9 column 中配置的參數就是生成的中間表中的字段名,另外一方配置的字段名需相同--> 10 <key column="wj_pid"></key> 11 <many-to-many class="com.demo.first.domain.UserAccount" column="ua_wj_id"/> 12 </set> 13 </class> 14 </hibernate-mapping>
useraccount.hbm.xml
1 <hibernate-mapping> 2 <class name="com.demo.first.domain.UserAccount" table="userAccount"> 3 <id name="uaid" column="uaid"> 4 <generator class="native"/> 5 </id> 6 <property name="loginName" column="loginName"/> 7 <property name="password" column="password"/> 8 <one-to-one name="employee" class="com.demo.first.domain.Employee"/> 9 <set name="privilegeSet" table="userAccount_privilege"> 10 <!-- 對應於另一方的參數配置,column 的參數值和另一方相同,也就是生成的中間表的字段名相同 --> 11 <key column="ua_wj_id"></key> 12 <many-to-many column="wj_pid" class="com.demo.first.domain.Privilege"/> 13 </set> 14 </class> 15 </hibernate-mapping>
另附上可以打開 hibernate debug 模式(可以查看所有的操作,包括自動建表語句等等):
需要的 jar 包等:
在 hibernate-release-5.4.2.Final\project\etc 中找到 log4j.properties 這個文件,直接放到 src 的根目錄下,即可:
重點就是上面的那個語句,去掉註釋(默認是打開的,沒有註釋)重啟即可,
hibernate中關系映射的配置問題