Hibernate学习3—映射对象标识符(OID)
生活随笔
收集整理的這篇文章主要介紹了
Hibernate学习3—映射对象标识符(OID)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、Hibernate 用對象標(biāo)識符(OID)來區(qū)分對象
作如下代碼的實驗:
public class StudentTest {public static void main(String[] args) {SessionFactory sessionFactory = HibernateUtil.getSessionFactory();Session session = sessionFactory.openSession(); session.beginTransaction(); Student s1 = (Student) session.get(Student.class, 1L);Student s2 = (Student) session.get(Student.class, 2L);Student s3 = (Student) session.get(Student.class, 1L);System.out.println(s1==s2); //falseSystem.out.println(s1==s3); //true 說明s1 和 s3指向的是同一個對象 session.getTransaction().commit(); session.close(); } } View Codeconsole:
s1和s3指向的是session中同一個OID為1的Student對象;
?
二、Hibernate 對象標(biāo)識符生成策略
生成主鍵的一個策略; 代理主鍵:stuId,純編號,不具有任何業(yè)務(wù)意義; 比如你取的主鍵是學(xué)號,stuNo,也是唯一的,這是具有業(yè)務(wù)性的; 如果數(shù)據(jù)庫建完之后,業(yè)務(wù)不會經(jīng)常變動,比較穩(wěn)的,比較死的,可以使用業(yè)務(wù)主鍵; 假如說業(yè)務(wù)經(jīng)常變來變?nèi)サ脑?#xff0c;就使用代理主鍵,是不具有任何業(yè)務(wù)性的,僅僅是唯一的標(biāo)識一條記錄的; 我們增加Studen的代碼都是: public class StudentTest2 {public static void main(String[] args) {SessionFactory sessionFactory = HibernateUtil.getSessionFactory();Session session = sessionFactory.openSession(); session.beginTransaction(); Student s = new Student();s.setName("張三");session.save(s);session.getTransaction().commit(); session.close(); } } View Code 1)incrementStudent.hbm.xml:
<hibernate-mapping package="com.cy.model"><class name="Student" table="t_student"><id name="id" column="stuId"><generator class="increment"></generator></id><property name="name"></property></class> </hibernate-mapping>運行測試代碼StudentTest2,發(fā)現(xiàn)建的表:
保存發(fā)出的sql:
?
2)identity
建的表:
保存發(fā)出的sql:
?
3)sequcence
mysql是不支持sequcence的,但是Oracle和DB2支持;
?
4)hilo
?
5)native
mysql的native和identity是一樣的;
創(chuàng)建表和發(fā)出的sql步驟都和identity一樣;不在演示
?
轉(zhuǎn)載于:https://www.cnblogs.com/tenWood/p/7237394.html
總結(jié)
以上是生活随笔為你收集整理的Hibernate学习3—映射对象标识符(OID)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将一个16进制数转化为10进制数
- 下一篇: 可穿戴在线展持续升温:聚焦产业热点 畅谈