<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Hibernate 獲取實體示例 – `get`與`load`方法 > 原文: [https://howtodoinjava.com/hibernate/how-to-load-get-entity-in-hibernate/](https://howtodoinjava.com/hibernate/how-to-load-get-entity-in-hibernate/) 學習使用`session.load()`或`session.get()`方法通過 ID 來獲取 **Hiberate 實體**。 了解`get`與`load`方法之間的區別,該方法通過 ID 從數據庫中獲取實體。 ## 1\. Hiberate 加載實體 – `session.load()` Hibernate 的`Session`接口提供了幾種重載的`load()`方法,用于從數據庫中加載實體。 每個`load()`方法都需要對象的**主鍵**作為標識符,并且必須提供該主鍵。 除了 ID,hibernate 還需要知道使用哪個類或實體名稱來查找具有該 ID 的對象。 `load()`方法返回后,我們需要將返回的對象強制轉換為合適的類類型,以進一步使用它。 我們需要`load()`方法來正常工作。 #### 1.1 `Session.load()`方法 讓我們看看 Hiberate 會話界面中可用的`load()`方法的不同風格。 ```java public Object load(Class theClass, Serializable id) throws HibernateException public Object load(String entityName, Serializable id) throws HibernateException public void load(Object object, Serializable id) throws HibernateException ``` 1. 第一種方法需要您要加載的類類型以及唯一的 ID。 2. 第二種方法直接要求**實體名稱**和唯一 ID。 兩種方法都將填充的實體對象作為返回值返回,并將其轉換為所需的類型。 3. 第三,以對象為參數。 該對象應與要加載的對象屬于同一類,并且應為空。 Hibernate 將使用您請求的對象填充該對象。 通過 Hiberate 會話可用的其他`load()`方法也將鎖定模式作為參數。 鎖定模式指定 Hibernate 是否應調查對象的高速緩存,以及 Hibernate 應對表示該對象的數據行使用哪個數據庫鎖定級別。 在官方文檔中,Hiberate 開發人員聲稱 *Hibernate 通常會為我們選擇正確的鎖定模式*,盡管在某些情況下手動選擇正確的鎖定很重要。 當我們完成基本的 Hiberate 概念時,我們將討論有關鎖的更多信息。 #### 1.2 `Session.load()`方法示例 讓我們以最簡單的形式看一下每種加載方法的示例,以清楚地了解我們上面所讀的內容。 ```java public class TestHibernate { public static void main(String[] args) { Session sessionOne = HibernateUtil.getSessionFactory().openSession(); sessionOne.beginTransaction(); // Create new Employee object EmployeeEntity emp = new EmployeeEntity(); emp.setFirstName("Lokesh"); emp.setLastName("Gupta"); //Save employee sessionOne.save(emp); //store the employee id generated for future use Integer empId = emp.getEmployeeId(); sessionOne.getTransaction().commit(); /************************************************************************/ //Let's open a new session to test load() methods Session sessionTwo = HibernateUtil.getSessionFactory().openSession(); sessionTwo.beginTransaction(); //first load() method example EmployeeEntity emp1 = (EmployeeEntity) sessionTwo.load(EmployeeEntity.class, empId); System.out.println(emp1.getFirstName() + " - " +emp1.getLastName()); //Let's verify the entity name System.out.println(sessionTwo.getEntityName(emp1)); sessionTwo.getTransaction().commit(); /************************************************************************/ Session sessionThree = HibernateUtil.getSessionFactory().openSession(); sessionThree.beginTransaction(); //second load() method example EmployeeEntity emp2 = (EmployeeEntity) sessionThree.load("com.howtodoinjava.demo.entity.EmployeeEntity", empId); System.out.println(emp2.getFirstName() + " - " +emp2.getLastName()); sessionThree.getTransaction().commit(); /************************************************************************/ Session sessionFour = HibernateUtil.getSessionFactory().openSession(); sessionFour.beginTransaction(); //third load() method example EmployeeEntity emp3 = new EmployeeEntity(); sessionFour.load(emp3 , empId); System.out.println(emp3.getFirstName() + " - " +emp3.getLastName()); sessionFour.getTransaction().commit(); HibernateUtil.shutdown(); } } ``` 程序輸出。 ```java Hibernate: insert into Employee (FIRST_NAME, LAST_NAME, ID) values (?, ?, ?) Hibernate: select employeeen0_.ID as ID1_1_0_, employeeen0_.FIRST_NAME as FIRST_NA2_1_0_, employeeen0_.LAST_NAME as LAST_NAM3_1_0_ from Employee employeeen0_ where employeeen0_.ID=? Lokesh - Gupta //First load method com.howtodoinjava.demo.entity.EmployeeEntity Hibernate: select employeeen0_.ID as ID1_1_0_, employeeen0_.FIRST_NAME as FIRST_NA2_1_0_, employeeen0_.LAST_NAME as LAST_NAM3_1_0_ from Employee employeeen0_ where employeeen0_.ID=? Lokesh - Gupta //Second load method Hibernate: select employeeen0_.ID as ID1_1_0_, employeeen0_.FIRST_NAME as FIRST_NA2_1_0_, employeeen0_.LAST_NAME as LAST_NAM3_1_0_ from Employee employeeen0_ where employeeen0_.ID=? Lokesh - Gupta //Third load method ``` 因此,我們能夠從所有三種加載方法中成功加載實體。 現在轉到`get()`方法。 ## 2\. Hiberate 通過 ID 獲取實體 – `session.get()` `get()`方法與`load()`方法非常相似。 `get()`方法采用標識符以及實體名稱或類。 還有兩種`get()`方法以鎖定模式作為參數,但是稍后我們將討論鎖定模式。 其余`get()`方法如下: ```java public Object get(Class clazz, Serializable id) throws HibernateException public Object get(String entityName, Serializable id) throws HibernateException ``` 使用`load()`或`get()`方法時代碼沒有太大差異,您需要做的只是在前兩個示例中將`load()`方法替換為`get()`方法。 沒有`get()`等同于最后一種`load()`方法。 您可以修改上面的示例并測試代碼。 如果您有任何問題,請告訴我。 ## 3\. `load()`和`get()`方法之間的區別 為什么我們有兩種方法可以完成相同的工作。 實際上,這也是[面試問題](//howtodoinjava.com/java-interview-questions/ "Java Interview Questions")經常問到的問題。 獲取和加載方法之間的**區別在于,當標識符在數據庫中不存在時,返回值將返回。** 1. 在`get()`方法的情況下,如果沒有標識符,我們將獲得返回值`NULL`。 2. 但是在`load()`方法的情況下,我們將獲得一個運行時異常。 加載方法的異常如下所示: ```java Exception in thread "main" org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.howtodoinjava.demo.entity.EmployeeEntity#23] at org.hibernate.internal.SessionFactoryImpl$1$1.handleEntityNotFound(SessionFactoryImpl.java:253) at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:219) at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:275) at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:151) at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1070) at org.hibernate.internal.SessionImpl.load(SessionImpl.java:940) ``` 這就是本入門級教程的全部內容,討論了**加載 Hiberate 實體**的過程。 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看