Hibernate Complete Notes by Sekhar Sir JavabynataraJ

Click here to load reader

  • date post

    07-Feb-2016
  • Category

    Documents

  • view

    306
  • download

    81

Embed Size (px)

description

JAVA Hibernate Complete Tutorial by Sekhar Sir

Transcript of Hibernate Complete Notes by Sekhar Sir JavabynataraJ

  • Hibernate

    For Evaluation Only.Copyright (c) by Foxit Software Company, 2004 - 2007Edited by Foxit PDF Editor

  • . -. -. pp.pp.--p.- ~ ... -. . . . ~ . - ..

    . - 1 Hibernate-Introduction M r.Sek11arReddy ,

    - - -.

    x.

    Q) Where actually java i s used? Q Java is used t o develop the enterprise applications Q Enterprise means business organization * Business organization provides servic2s

    ! 1 Q) What i s Enterprise Application? * Computerizing business services , .

    1 Architecture o f Enterprise Application - . -

    I Controller Layer

    I

    Client Layer -. Presentation I

    I I 1 Layer I + . a < * . : " - J : I--..- - _ "

    I 1 Client Layer: I

    i 3 It is browser software.

    1 Controller Layer: 1 P Receiving user request f rom client (calling request) I > Capturing the user provided data

    P Validating the user input 1 Calls the business method t o get business services and get processed data > Keep the processed data in memory(request/session/application scope) I > Finally forwarding the request t o VIEW. i

    '~

    IVote: should not write business-Logic/Data-Access-Logic in the Controller Layer. Because that is not reusable

    Presentation Layer: - I P Receive the control from Controller Layer / P Generate the output by taking the data from memory(request/session/application scope), which is

    stored by controller layer P Generated output will be given t o web-server, which intern return present the output t o browser

    Business/Service Layer:

    1 I Naresh i Technologies, Opp. Satyam Theatre, Anleerpet, Hyderabad, Ph: 040-23746666, 23734842

    An IS0 9001 . 2000 Certified Company L - - - -. - - - -- - - - -. . - - - -. - - -- - - .- - - - . - - - - - - - - .- -

    Page 1 http://javabynataraj.blogspot.com 2

  • . , -.-- . . . - - - L -- .- . i - -

    O Receiving request from Controller Layer 1 P Contacting the Data Access Layer to get the database data

    3 Implementing the business logic 3 Return the control/processed-data to Controller Layer

    PersistentIData-Access Laver: i Receiving the request from business Layer

    I P Contacting database to get the database data O Return the accessed data to business Layer

    I Data Laver:

    1 > It is a database.

    - ' Q) What are the different logics available in Enterprise Application? I I Presentation Logic: Logic used t o present the output/input. I I Application/Controlling Logic: Logic used t o control the flow of application. I I -

    1 / Business Logic: Programmatical implementation of business rules is nothing but business logic. j I Data Access Logic: Logic used t o contact the Database. -

    I Q) What are the Sun Microsystems technologies and frameworks in enterprise application development?

    Controller Layer ' I Servlets I / JSF

    . ' I

    Presentation Layer JSP

    Business Layer t

    EJB2 session beans EJB3 session beans WIDB(Message Driven Beans)

    ' WEB-SERVICES

    Data Access Layer JDBC Ejb2 entity beans Ejb3 entitys[JPA ] (java persistence API)

    I Q) What are t he non-Sun Microsystems technologies and frameworks in enterprise application 1 development? 1 1 Controller Layer

    struts Spring Web MVC

    ' I Wicket --

    Tapestry ' I Flash I I 1 ,

    1 Objective of Hibernate: Developing Data access layer of an Enterprise application 1 I Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 I I

    Presentation Layer HTM L Velocity Freemarker Flex

    ~ u s i n e k La-yer Spring AOP Spring JEE WEB-SERVICES

    L--. An IS0 9001 : 2000 Certified Company -. .- -- - - .. -. - - - - - - - - -. . - - Page 2 -

    1

    Data Access Layer Hibernate lbatis Toplink JDO Spring DAO Spring ORM

    http://javabynataraj.blogspot.com 3

  • , Hibernate-In troduction

    ' Q) What is persistence in a java based enterprise application? ! I > The process of storing enterprise data in to relational database is Iknown as persistence

    Q) What is the traditional style o f achieving persistence in java based enterprise application? I > Sending SQL statements t o the Database using JDBC API I

    I

    I ' Q.) What are the iimitations o f the traditional approach? I

    'i Application portability to the Database is lost (Vendor lock: diff SQL statement for the db's) 1

    3 Mismatches between Object oriented data representation and relat~onal data representation are not I I properly addressed I I

    3 Requires the extensive knowledge of DB

    I P Manual operations on Resultset I 7 I I

    v For every problem while commun~cating with the database (us~ng JDBC), i t throws same I -

    I exception(java.sql.SQLException). As SQLException is checked exception, so we must write code in try- ; I catch block or throws has t o be specified. , I I

    I > Need t o implement caching manually i I

    I 3 In the Enterprise applications, the data flow with in an application from class to class will be in the 1

    form of objects, but while storing data finally in a database using JDBC then that object will be I converted into text. Because JDBC doesn't transfer objects directly. I

    'I 1 4.) wha t is an alternative for traditional approach? ! / > ORM (Object Relational mapping) I > It i s technique of mapping objected oriented data to that of relational data

    > Through ORM technique persistence services (database) are provided t o business layer in pure object oriented manner by overcoming all limitations of the traditional approach I I

    Q.) What is Hibernate?

    & Hibernate is an ORM implementation > Hibernate is an Open source

    i ! b Hibernate is a framework I > Hibernate invented by Gavin King. He also invented JBoss server and JPA

    -

    Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666, 23734842 An I S 0 9001 : 2000 Certified Company

    - -- I

    Page 3 http://javabynataraj.blogspot.com 4

  • ~

    ~ ~ ~ ~~ ~. ~-~ . ~ ~ ~~ .~~ ~ .

    Hibernate-In troduction - - - - -. - - -

    ._ -_.. "..._._.. ._Ul-- -

    Mr.SekharReddy . .-. - ,,?--,.->>"<

    3 Hibernate is a non-invasive framework, means it won't forces the programmers t o extend/implement arly class/interface, and in hibernate we have all POJO classes so its light weight

    k Hibernate can run w i th or wi thout server, I mean i t will suitable for all types of applications (desktop or web applications)

    Q.) What is a framework?

    A frameworl< is reusable semi finished application that can be customized to develop a specific application.

    Q.)What are the features of hibernate?

    1 9 Hibernate persists java objects into database (Instead of primitives) 9 It provides Database services in Database vendor independent Manner, so that java applications

    I I become portable across the multiple databases I

    i 9 Hibernate generates efficient queries for java application to communicate wi th Database i I ,

    9 I t provides fine-grained exception handling mechanism. In hibernate we only have Un-checked I exceptions, so no need t o write try, catch, or no need to write throws (In hibernate we have

    . -

    the translator which converts checked t o Un-checked) 1 3 it supports synchronization between in-memory java objects and relational records I

    > Hibernate provides implicit connection pooling mechanism ! I j Hibernate supports Inheritance, Associations, Collections

    I 3 Hibernate supports a special query language(HQL) which is Database vendor independent 1 9 Hibernate has capability t o generate primary keys automatically while we are storing the records into /

    database i 1 > Hibernate addresses the mismatches between java and database 1 1 > Hibernate provides automatic change detection I

    I

    I 9 Hibernate often reduces the amount o f code needed t o be written, so i t lrnproves the productivity I I i > Database objects (tables, views, procedures, cursors, functions ... etc) name changes will not affect

    I I

    I hibernate code i

    I > Supports over 30 dialects Hibernate provides caching mechanism for efficient data retrieval

    I - -

    > Lazy loading concept is also included in hibernate so you can easily load objects on start up t ime 1 > Getting pagination in hibernate is quite simple. ( > Hibernate Supports automatic versioning o f rows i

    I

    I I

    Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 i An IS0 9001 : 2000 Certified Company I

    1 - - -. . . - -. - -. I Page 4 http://javabynataraj.blogspot.com 5

  • Hibernate-Introduction - --- -- McSekharReddy -.-

    I - - i i 3 Hibernate provides transactional capabilities that can work with both stand-alone or java Transaction 1 I 1 API (JTA) imple~nentations ... etc . .

    , I I i Hibernate supports annotations, apart from X M L I I I , Q.)What are the disadvantages of hibernate? 1 I I 3 Since hibernate generates lots o f SQL statements at runtime so it is slower than pure JDBC

    i \i. Hibernate is not much flexible in case of composite mapping. This is not disadvantage since 1 understanding of conlposite mapping is complex

    / P Hibernate does not support some type of queries which are supported by JDBC 1 9 Boilerplate code issue, actually we need t o write same code in several files in the same application, I ', but spring eliminated this I I

    1

    1 Hibernate Architecture 1

    java application n A \L' Hibernate API

    +r--- - -- I--- Hi l re ina le E ngi n e .- configuration file

    \

    ,I D E C

    './

    Data base 1 Java Application makes use of hibernate API methods calls t o inform the persistent needs t o I-, hibernate. Then Hibernate engine generate .lDBC code that corresponds t o the underlying DB by using 1

    l- mapping f i le and configuration f i le information. I

    I

    I I r. We can also find the architecture diagrams as follows ... i I i Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666, 23734842 1 ( 1 L. - _ _ - __-- An IS0 9001 : 2000 Certified Company I .-- - . - - -

    Page 5 http://javabynataraj.blogspot.com 6

  • . . . . . . . . . . . . . - . . . . . . . .

    JTA J N D l . ~ f

    ...r...*.-...... &. .>** ..&...".., ."*"? ... * ..-.-... '*..." - . . . . . . . . . . . . . . . . .

    I

    I -- I I Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 i

    An IS0 9001 : 2000 Certified Com~anv I Page 6 http://javabynataraj.blogspot.com 7

  • 2 . / 3 . < c l a s s name="Entl ty c l a s s namev t a b l e = " t a b l e name I n d a t & a s e l ' > 1 4 . < l d name="ld v a r l a b l e name" column="prlmary column name l n d a t a b a s e " /> 1 5 . < p r o p e r t y name="var i ab le l name1' column="column name l n d a t a b a s e " /> 1 6 . < p r o p e r t y name=I1varlable2 name" column="column name l n d a t a b a s e " /> ' 7 . < / c l a s s > I 8 . , 9 .

    Syntax Of Mapping Annotations: 1. @ E n t i t y 2 . @Table(name = " t a b l e name i n d a t a b a s e " ) 3 . p u b l i c class EntityName { 4 . @ Id 5 . @Column(name = "pr imary column name i n d a t a b a s e " ) 6 . p r i v a t e i n t idVariableName; 7 . 8 . @Column (name = "column name i n d a t a b a s e " ) 9 . p r i v a t e S t r i n g variableName1; 1 0 . @Column(nams = "column name i n d a t a b a s e " ) 11. p r i v a t e S t r i n g variableName2; 1 2 . / / setters & g e t t e r s 13. 1

    Q.) What i s hibernate configuration file?

    i It is an XML file in which database connection details (username, password, url, driver class name) and , Hibernate Properties(dialect, show-sql, second-level-cache ... etc) and Mapping file name(s) are t specified to the hibernate

    I > Hibernate uses this file t o establish connection t o the particular database server I i 1 Z Standard for this file is

    3 We must create one configuration file for each database we are going t o use, suppose if we want to 1 ij

    connect w ~ t h 2 databases, like Oracle, MySql, then we must create 2 configuration files. I No. of databases we are using = That many number of configuration files I

    I

    I > We can write this configuration in 2 ways ... o XML file

    o Properties file(o1d style) ( > We don't have annotations t o write configuration details. Actually in hibernate l.x, 2.x we defined this j.

    , \

    1 configuration by using .properties file, but from 3.x XML came into picture. XNlL files are I I always recommended t o use.

    Syntax Of Configuration xml: 1. < h i b e r n a t e - c o n f i g u r a t i o n > 2 . < s e s s i o n - f a c t o r y > 3. 4 .

    I Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 - ~- -

    An IS0 9001 : 2000 Certified Company ~Tge8- http://javabynataraj.blogspot.com 8

  • I Q.) What i s hibernate mapping file? ' 3 In this f ~ l e hibernate application developer specify the mapping from entity class name to table name i 1 and entity properties names to table column names. i.e. mapping object oriented data to relational

    data is done in this f ~ l e I i Z Standard name for this file is I I I r In general, for each domain object we create one mapping file Number of Entity classes = that many number of mapping xmls I Z Mapping can be done using annotations also. If we use annotations for mapping then we no need to I

    write mapping file. I Z From hibernate 3.x version on wards it provides support for annotation, So mapping can be done in

    two ways o X M L o Annotations

    Syntax Of Mapping xml: 1 1. i

    I Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 An IS0 9001 : 2000 Certified Company

    http://javabynataraj.blogspot.com 9

  • 5. pa~~~~rd 10. 11. < ! - - Related to hibernate properties START --> 12 . Database dialet class 14 . create/update or what ever 15. < ! - - Related to hibernate properties END--> 16. 17. < ! - - Related to mapping START--> 18. 19. 20. < ! - - Related to the mapping END --> 21. 22 . 23 .

    I ' Q.) What are the Simple Hibernate Application Requirements? I -.

    Setting hibernate environment I I I

    1 1 Entity class 2 . Mapping file(Required if you are not using annotations)

    i 3. Configuration file

    1 i ; To work with hibernate framework we need to add .jar(s) files provided by that framework to '

    I

    I j our java application.

    4. DAO class (Where we write our logic to work with database)

    ( 1 i No framework-is installable software, it means we doesn't contain any setup.exe I 'i When we download any framework, we will get a 'zip' file and we need to unzip it, to get the required 1. i

    jar files, actually all frameworks will follow same common principles like ... 1 j !

    o Framework will be in the form of a-set of jar files, where one jar file acts as main (We can call ! this file as core) and remaining will acts as dependent jar files.

    1 I o Each Framework contain at least one configuration xml file, but multiple configuration files also i allowed.

    > We can download hibernate jar files from the following links. Based on requirement we can download the corresponding version.

    o For version 2.x (http://sourceforge.net/projects/hibernate/files/hibernate2/) o For version 3.x (http://sourceforge.net/proiects/hibernate/f1les/hibernate3/) o For version 4.x (http://sourceforge.net/projects/hibernate/f1Ies/hibernate4/)

    > While dowr~loading select .zip file for windows environment, select .tar flle for unix environment. 1 j Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666, 23734842

    An IS0 9001 : 2000 Certified Company 1 : I

    - ---

    Page 9 1 http://javabynataraj.blogspot.com 10

  • - - Hibernate-Introduction

    After downloading the zip file, unzip it and we can find the required jars in the extracted folder. If we consider 4.x version, we need the following jars to work with hibernate application.

    NOTE: Along with the hibernate jars we must include one more jar file, which is nothing but related to our database, this , is depending on your database. For example, i f we are working with Oracle we need to add ojdbc6.jar.

    4.) W h a t are t h e Steps t o develop h ibernate applications? -

    1 ' Step 1: Develop persistent/domain/entity class for each table of the relational mode l -

    Step 2: For each enti ty develop a mapping file

    i Step 3: Develop the configuration fi le

    I Step 4: Add hibernate f ramework jar files in the classpath 1

    / Step 5: Make use of hibernate API and perform persistent operations

    4.) H o w t o M a k e use o f hibernate API t o pe r fo rm persistent'operations?

    I STEP1: Create Configuration object Configuration configuration = new Configuration();

    STEP2: Read configuration f ~ l e along w i t h mapping files using configure() rnethod o f Configuration Object I

    configuration.configure(); 1 S'rEP3: Build a SessionFactory f rom Configuration

    I SessionFactory factory = configuration.bhildSessionFactory(); !- STEP4: Get Session f r o m SessionFactory object

    Session session = factory.openSession(); I STEP5: Perform persistence operations I

    I 1 Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842

    An IS0 9001 : 2000 Certified Company - -- --

    Page 10- http://javabynataraj.blogspot.com 11

  • Hibernate-Introduction

    The Session interface provides methods to perforni CRUD (Create Read Update Delete) operations o n i ,.. -

    I the instances of mapped entity classes. Perform transactions if require while performing DML: : I

    operations. Session interface methods are ...

    I

    L; S s;, 0 1-1 2: a:..'* i :3 : - l!l.:.el-tincl okjelzt .8 ' intl:~ database . ! : -

    . .

    ses$;it:~n 1.19date1:s: - LJ:.~.cl~!it-~ci ob jec t 's it1 the ~ : la tabase I

    , STEP6: Close the session

    I Final .flow will be ...

    Sa:ssiul-1

    TI-ansaction

    Close Statet?lents

    ~a resh i Technologies, Opp. Satyarn Theatre, Arneerpet, Hyderabad, Ph: 040-23746666, 23734842 An I S 0 9001 : 2000 Certified Company

    --

    . .

    Page 11 http://javabynataraj.blogspot.com 12

  • Hibernate-CRUD Application - By Mr. SeltharRedcly - -. . - .

    ' -A

    4.) Develop Hibernate application, i n wh ich w e can per fo rm account creation, retrieve, update and delete? SQL Script CREATE TABLE ACCOLIkIT ( ACCNO NUMBER (5 ) IUOT NULL, NAME VARCHAR2 (20) NOT NULL, BA L NUMBER(8,2) NOT NULL, CREATION-DT DATE NOT NULL, PRIMARY KEY ( ACCNO )

    1

    i ACCOUNT TABLE E: :-'..L CREAT IOI I-DT

    fiP541.07 J ':74>:7illi J . - . . - . ! 91:1U02 yellari.diis; E:i;5d$.69 5;'15;21:112

    gDlli13 clierr-,! - - ac(-iS?.?6 5,,'2!2l:l12 I

    I hibernate.cfg.xml 1 1.

  • , . - ~ . . - -~ ~ - .. . .. - - ~ ~.~ ~ ~~ ~ . . . ~~ I -\

    : Hibernate-CRUD -- Application .. .. -. . . -. . . . . ------. - ,-&c3 . "< .

    By Mr. SekharReddy - ; -- - - .- .. .. .. . -. . - - . . . - - - - - .- -. -. - - -

    .yr*r- -.,..YLTu_ ,- - -- . I .% ,.:

    j 1 4 . < / p r o p e r t y > ! 15. ,,./ :, .,.- ., . . ~ " -. .. ,. . - y ,;...!-:-- -.-.!!~;.c:ion. u s e r n a m e " > s y s t i : n ~ < : p r o p ~ r ~ ~ - > j 1 6 . t iqe r< ip rope r t ; . : - 1 1 7 . j 18. G : ?z.: .e . : .;:::. : ! r i v e r . O r a c l s D r i ~ r e ~ I 1 9 . ',i ~ J L ~ . , , ~ : i;; ; 2 0 . - .>,%73, - ;- . . - - -. t c , - . - - . .. : . ! i ec t ion . pool s i z e n > l 5.. , i-,rpei:t;::

    -

    1 2 1 . ;Proper ::..,. ,; -.., ..= "::.:I::.: -. s c l l " > t r u e < / p r o p e r t . - 2 2 . < ,-,= .- - . . ,, - ;,. -: !' .- ,. ..,?-I,-! 1 2:. .. - '. . . . . . .. . . . .. ...< . autoU>update;. .sr~;:;: ,

    i 2 3 . t r ~ e < / p r ~ ~ ~ p e r t ~ . ~ > 1 2 4 . , : : > ~ = ~ !~..-.n-.t I:...-. - sqll '>true

  • -~ -- - .- .- - - . ~ - ~~~. . - -- - - - -

    Hibernate-CRU D Application By Mr. ~ e l t l ~ a r ~ e d d ~

    Session session = (Session) threadLocal.get(); tlireadLocal.set(nulI);

    i f (session != null) { session.close();

    1 1

    public static Session getsession() ( return ses~ionFactory.openSession();

    1

    public stat~c void closeSession(Session session) { if (session != null) {

    session.close(); 1

    1

    --

    , Account.java I 1. package com.sekharit.hibernate.bean; - 2.

    / 3. import java.ut~l.Date; 4.

    1 5. public class Account { 6. private long accno;

    1 7. private Str~ng name; 8. private double balance;

    I 9. private Date creat~onDate; 10. , 11. public long getAccno() {

    return accno; 1

    public void setAccno(long accno) { this.accno = accno;

    1

    public String getName() { return name;

    1

    public void setName(String name) { 24. this.narne = name; I 25. ) 26. 1 27, public double getBalance() {

    I 28. return balance; I 29. 1

    1 Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666, 23734842 I An IS0 9001 : 2000 Certified Company I

    p a g e ~ - - - ' http://javabynataraj.blogspot.com 15

  • [--? -- . . - - - - - - . . - - .- - - . - ~ ..- . ~~ , -.\ . - I Hibernate-CRUD Application ! -- - - -- - -- - . .. . . . - . . .--... .-.yl.S..--

    By Mr. ~ e k h a r ~ e d d ~ \ - - - - ~ .< ,. . ,

    ----.U .-\

    1 30. 31. public void serBalance(double balance) { 1 32. this.balance = bala~ce;

    ! 33. 1

    35. public Date getCreationDate0 { return creationDate;

    37. } I 38. 1 39. public void setCreationDate(Date creationDate) { 40. this.cr?ationDate = creationDate; 41. } 1 42. 43. @Override 1 44. public String tostring() { 1 45. return "Account [accno='! t accno + ", balance=" + balance 46. + ", creationDate=" + creationDate + ", name=" + name + " I " ; 47. } 1 48. I Account. hbm.xml 1. 2.

    10. 16. 17. 18. 19.

    AccountDAO.iava 1. package com.sekharit.hibernate.da0; , 2. 3. import 0rg.hibernate.HibernateException; 4. import org.hibernate.Session; 5. import 0rg.hibernate.Transaction; 1 :: import com.sekharit.hibernate.bean.Account;

    1 8. import com.sekharit hibernate.util.5essionUtil; llaresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842

    ---

    An I S 0 9001 : 2000 Certified Company - - - . - - -- -

    Page 4 http://javabynataraj.blogspot.com 16

  • - - Hi . .- bernate-CRUD Application . By Mr. SeltharReddy wi.e-ii-ii-l - --

    9. 10. pcrbl~c class AccountDAO { 3 1. (~ubl lc Account get(long accno) { 12. 13. Sess1011 session = null;

    , 14. Account account = null; 15. try {

    I 16. session = SessionUtil.getSess~on(); I 17. account = (Account) session.get(Account.class, accno); , 18. } catch (HibernateException e) { I 19. e.printStackTrace();

    20. } f~nally { 1 21. SessionUtil.closeSession(session);

    22. 1 1 23.

    24. return account; j 25. } 26. 27. publ~c v o ~ d ~nsert(Account account) { i 28.

    1 29. Session session = null; I 30. try { 7 31. session = SessionUtll.getSession();

    I 32. session.getTransaction().begin(); 33. session.save(account);

    1 34. session.getTransaction().cornm~t(); 35. } catch (HibernateException e) {

    1 36. session.getTransaction().rolIback(); 37. e printStackTrace0;

    1 38. } f~nally { 39. SessionUtil.cl~seSession(session);

    1 40. } I 41. }

    42. I 43. publ~c void update(Acc0unt account) { 44. Session session = null; I 45. try { 46. session = SessionUtil.getSession();

    1 47. sess~on.getTransact~on(). beg~n(); 48. session.update(account); 1 49. session.getTransaction().comrnit(); 50. } catch (HibernateException e) { ( 51. session.getTransaction().rollback();

    -- 52. e.printStackTrace(); I 53. } f~nally { 54. SessionUtil.closeSession(session);

    55. 1 I 56. } 57.

    1 58. public void delete(long accno) { I Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 --

    An IS0 9001 : 2000 Certified Company - -

    PagT5- http://javabynataraj.blogspot.com 17

  • -. - - - . - - - - - - . - -- . -- - . -. . - - - - -. -

    Hibernate-CRUD Application B Mr. Sel

  • I --, Hibernate-CRUD Application - -- - - - --

    . . . . . . . -- . . . . . .

    By Mi-. Sel;ha~-Reddy !

    33. uAccount.setBalance(4500); 34. uAccount.setCreationDate(new Date()); 35. dao.update(uAccount); 36. System.out.println("Account updated successfully"); 37. 38. // Delete Account 39. dao.delete(90002); 40. System.out.println("Account is deleted successfully"); 41. 42. } 43. }

    After Execution ACCOUNT TABLE : ,-*. . ? ;;. ,-.c c- 1.10 Il.,\li.lE E:AL CREhT 101 I-UT t I:i.:a>, ?:-eddy 69541.03 5: 29,'21:1!::

    9l:ll:lOj ~e\ ; t l l l l -ed j j ' 45i10 j!Z?jLI:l]z !21:11:105 5el:hal- 6Sgg 529 j iC112

    1 Q.) Rewr i te t h e above application, using annotat ions instead o f mapp ing f i le?

    d . . * ' cctn.r tkb~ar i t .h ih~rnatr .ut i I :.i . . : Ser-~ian!JtiI,~a~.~a

    . .

    , .

    r-:. :,.-J. JRE S y . ~ t i i i ~ L i b r a y ,...;;a::,:. . , - - H i t x r n a t e 3 .3 Anncta t ion ' : F,t Entit!. I:;lanagel ......

    i , . Hitlel-nate 3.3 C n r e Librar ies LI ~ i j R e f e r ~ t i c e d Lihrariel:

    080 c

  • ~ . - .. -

    i 1 - Hibernate-CRUD Application By Mi-. Sekhal-lieddy. - -: , --

    /: -. . -.'%-*au#A&.Lcas* -*=--&= i I

    ~' -,

    ; 23. 1 24. 'A

    ! 25. public void setAccno(1ong accno) { j 26. this.accno = accno; ,, ' 27. } 1 28.

    I?

    ! 29. @Column(name = "NAME", nullable = false, length = 20) ,. 30. public String getName() {

    ,--..

    31. return name; 32. }

    ! 33. , . I : 34. public void setName(String name) { 1 35. this.name = name;

    ~. j 36. } ! i 37. I I 38. @Column(name = "BAL", nullable = false, precision=8, scale=2) \.

    I 1 39. public double getBalance() { I ) 40. return balance; \ 41. } 1

    / 1 42. , j I 1 43. public void set~alance(double balance) { I

    44. this. balance = balance; - 45. } I

    1 46. ., \ I x.

    47. @TemporaI(TemporaIType. DATE) I ! I 48. @Column(name = "CREATION-DT", nullable = faise) ,. \

    \ , 1 49. public Date getSreationDate() { i 50. return creationDate; 1 I .

    51. } i- 52. 1, h :. 53. public void setCreationDate(Date creationDate).{ , I* . 54; ! this.creation[>ate = creationDate; 1.- 55. } 56. I i 1 57. @Override 1 58. public String tostring() { 1 59. return "Account [accno=" t accno + ", balance=" + balance 1, 1 60. t ", creationDate=" + creationDate + ", name=" + name + "I"; 61. }

    l~ i 1 62.

    , 63. 1 Account.hbm.xml

    I 1: ---NOT REQUIRED--- \ -

    I , AccountDAO.java !

    I , ---Same As Above--- I -

    i I

    AccountService.iava I ! ---Same As Above--- 1 ' - / I / r

    I Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666, 23734842 i

    An I S 0 9001 : 2000 Certified Company I I \ -- _ _ _ _ 1

    Page 9 http://javabynataraj.blogspot.com 20

  • -. - - - - - -. -- -- --- - -- - - -- - - - -- - - -- - - - - - ---

    H ibernate-CRUD Application B v MI-. ~ e l t h a r ~ e c l d v -

    Hibernate - The type Annotationconfiguration is deprecated I

    I Problem

    I Working with Hibernate 3.6, noticed the previous "org.hibernate.cfg.Annotat~onConf~gu~-at~on", 1s marked a s "deprecated".

    Code snippets ...

    org.hibernate.cfg.AnnotationConfiguration;

    private static SessionFactory buildSessionFactory() { t ry 1

    return new AnnotationConfiguration().configure().buildSessionFactory(); 1 } catch (Throwable ex) {

    The code is still working, just keep displaying the deprecated warning message, is there any replacement for I "AnnotationConfiguration" ? I

    I

    ! -

    I -

    i Solution

    System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionlnlnitializerError(ex);

    1 . I

    Q In Hibernate 3.6, "org.hibernate.cfg AnnotationConfigurat~on" is deprecated, and all its functiona!~ty has been ! moved to "org.hibernate.cfg.Conf~gurat~on".

    I 4 SO, you can safely replace your "AnnotationConfiguration" with "Configuration1' class. I Code s n i ~ ~ e t s ...

    import org.hibernate.cfg.Configuration; ! / I...

    System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionlnlnitializerError(ex);

    1

    I

    1 I

    I I Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842

    An IS0 9001 : 2000 Certified Company Page 10

    private static SessionFactory buildSessionFactory() { t r y 1

    return new Configuration().configure().buildSessionFactory();

    } catch (Throwable ex) {

    http://javabynataraj.blogspot.com 21

  • -- .- - - - - - - - - - _-- _ _ _ . , ,

    Hibernate-CRUD Application -. -

    ___a

    By Mr. SeltharRedciy - -- - - - . -- - - -.

    -'-4- I A

    Account" />

    SessionUtil.java . . 1. package com.sekharit.hibernate.uti1; I

    ," -

    ' 2, import org.hibernate.Session; 3. import org.hibernate.cfg.AnnotationConfiguration; , i . 4. public class SessionUtil { % .

    I 5. I

    ,' 6. private static final ThreadLocal threadLocal = new ThreadLocaI(); 7. private static org.hibernate.SessionFactory sessionFactory; 8.

    , I 9. static { I

    ' 10. t ry { ! 11. sessionFactory = new AnnoationConfiguration().configure( : 12. "com/sekharit/hibernate/config/hibernate.cfg.xmI").buildSessionFactory(); - :I , 13. } catch (Exception e) { I

    14. e.printStackTrace(); ," 15. } -

    1 16. } I I , \

    1 17. ........................... 1 18. ........................... r

    Account.iava 1. package com.sekharit.hibernate.bean; 2. 3. import-java.util.Date; 4. 5. import javax.persistence.Column;

    I 6. import javax.persistence.Entity; 1 7. importjavax.persistence.ld; I 8. importjavau.persistence.Table; 1 9. import javax.persistence.Tempora1; ' 10. import javax.persistence.TemporalType; i 11. @Entity 1 12. @Table(name="ACCOUIVT") . 1 13. public class Account { 1 14. private long accno;

    15. private String name; 16. private double balance; 17. private Date creationDate; 18.

    ' 1 9 . @Id 20. @Column(name = "ACCNO", nullable =true, length=5) 21. public long getAccno() { 1 22. return accno;

    Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 An IS0 9001 : 2000 Certified Company

    . . . . . . . . . .- . . . . . . . . . . . . . . . . . . . - .... - -. .- . -- - -.

    ~a g e8. ' http://javabynataraj.blogspot.com 22

  • ' ' Hibernate-Arcl~itect~~ral Elements

    , Q.) Explain more about hibernate.cfg.xml (configuration file)? I I .

    3 This xml file used to specify locations of mapping files/Entities I > In projects we don't give the database details(ur1, username, password, driverclass) in the I configuration file, instead of that, we give JNDl name of DatatSource.

  • I 3 If its value is 'update', hibernate will check for schema existence. If schema doesn't exist it will I I

    create the new schema. If the schema already exists it uses the existing schema for persistence operations.

    Q.) What do you know about dialect in Hibernate?

    P Dialect class is a simple java class, which contains mapping betweerr java language data type and database data type. i

    / P Dialect class contains queries format for predefined hibernate methods I 2 Hibernate generates queries for the specific database based on the Dialect class. If you want t o shift 1

    f rom one database t o another just change the Dialect class name in hibernate.cfg.xml file. 1 I

    1 9 All Dialect classes must extend 'Dialect' (abstract) class i ! 1 9 Hibernate supports almost 30 dialect classes.

    9 I f we want we can write our own dialect by extending Dialect class I

    I Dialect class i s used convert HQL queries into database specific queries.

    I I \ Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 1 An I S 0 9001 : 2000 Certified Company I .

    --- - - -- -1 Page 2 http://javabynataraj.blogspot.com 24

  • Hibernate-Arcl~itectural Elements

    I MySQL with InnoDB 1 org.hibernate.dialect.MySQL5lnnoDialect

    DB2 AS1400

    DB2 05390

    PostgreSQL 1 MySQL

    I I Oracle (any version) org.hibernate.dialect.Oracle8iDialect I

    -

    org.hibernate.dialect.DB2400Dialect org.hibernate.dialect.DB2390Dialect org.hibernate.dialect.PostgreSQLDialect org.hibernate.dialect.MySQL5Dialect

    1 Sybase 1 org.hibernate.dialect.SybaseDialect

    ' oracle 9i

    1 1 oracle l o g org.hibernate.dialect.Oracle9;Dialect org.hibernate.dialect.Oracle10gDialect

    1 I Microsoft SQL Server / org.hibern; te.dialect .~~~server~ialect

    '/

    > Sybase Anywhere

    TI Microsoft SQL Server 2008 I org.hibernate.dialect.SQLServer2008Dialect I I I

    org.hibernate.dialect.SybaseAnywhereDialect 1 I

    I I SAP DB 1 org.hibernate.dialect.SAPDBDialect , 8 !

    I I!

    HypersonicSQL 1 org.hibernate.dialect.HSQLDialect 1 1 I I -I I I lngres

    Mckoi SQL -1 I I org.hibernate.dialect.MckoiDialect I

    org. hibernate.dialect.lngresDialect

    org.hibernate.dialect.ProgressDialect 1 I

    I

    Q.) Explain more about Hibernate mapping fi le? I

    I

    Progress

    I lnterbase

    FrontBase

    1 / Firebird

    > Each hibernate mapping file must contain only one (or relevant tag )

    > Java object identi f ied uniquely by the tag property.

    org.hibernate.dialect.lnterbaseDialect 1 !

    i org.hibernate.dialect.FrontbaseDialect org.hibernate.dialect.FirebirdDialect

    ..A

    I > tag property corresponding column can be primary key or non-primary key in the database

    org.hibernate.dialect.PointbaseDialect Pointbase

    I

    I > In mapping file class names and property names are case sensitive. But Table names and column

    I

    I

    I names are no t case sensitive. ! 1

    1 I Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 ! An IS0 9001 : 2000 Certified Company

    -- PTe- 2-.. .- http://javabynataraj.blogspot.com 25

  • , ~ ~~ . - ~ ~ . .~ ~ . ~ ~ ' ,

    Hibernate-Archi tectul-a1 Elements j -~ . . . . . . . .

    -- Mr.SekharRecidy -La,D . - . i - \ I \

    I i P When the property name and column name both are same we no need t o give 'column' a t t r i bu te :,- r When the Pers~stent class name and table name both are same we no need to give 'table' a t t r~bu te

    r Generally we write one mapping f ~ l e per one domain object. But i t allows writing multiple objects - mapping information wi th in the same mapping file. Per each class mapping we need t o write one tag.

    I r Databases have different ways t o organize i t s tables. Some database places all tables in a different "schemas", some database places all tables in a different "catalogs". If we want we can specify this in tag of the mapping file i 9 In mapping file we write fully qualified name of the entity class in "name" attribute of tag. Instead of that we can write package name separately using "package" attribute of tag

    P In the mapping file we no need t o map all the properties of the entity and all the columns of table. As per our requirement we configure required properties of the entity and columns of the table

    1 Q.) Explain about annotations which are used in our application t o map entity t o table? I P In our examples i f we observe, we used the following annotations

    I I o @Column ---we----

    I Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 An IS0 9001 : 2000 Certified Company Page 4 http://javabynataraj.blogspot.com 26

  • ~ pppp-.- ..... . .

    Hibernate-AI-chitectural Elements ....................... 8 _nl..x&r ... -~ .. , . .I

    ~ r . ~ e k l ~ a i - ~ e c l d y - -. -

    -

    o @GeneratedValue o @Temporal

    /- All the above annotations we are taking from java.persistence package. Actually this paclcage is not the part of hibernate API. This paclcage is f rom .IPA(Java Persistence API).

    > These annotations also given by hibernate. But we don't prefer t o use hibernate given annotations. We prefer t o use .lPA annotations. Reason for this is, Hibernate is a specific API, where as ]PA is a specification. If we use JPA annotations we have t o flexibility t o change the implementation vendor wi thout changing application code.

    i > .IPA is an APl(from SUN), its not the implementation. There are mult iple implementations are there for ]PA. Some of famous implementation of ]PA are Open.lPA, Hibernate, Toplink Essentials, Eclipselinlc ... etc.

    ' 4.) What is Configuration object? > Object Oriented representation of hibernate configuration file along w i t h mapping file is known as

    - Configuration object

    - 3 By default Hibernate reads configuration file wi th name "hibernate.cfg.xml" which is located in 1

    "classes" folder

    I 9 If we want t o change the file name or i f we want change the location of "hibernate.cfg.xml" then we need to pass user given configuration file name (along with path) t o "configure()" method of

    1 Configuration class

    1 P Configuration object Stores the configuration file data in different variables. Finally all these variables are grouped and create one high level hibernate object called SessionFactory object.

    I P So Configuration object only meant for creating SessionFactory object

    I > If we want we can provide the configuration information programmatically, without writ ing

    I configuration fi le.(But it wi l l become Hard coding, so not advisable)

    1 Programmatic configuration I Adding mapping files t o configuration object programmatically

    -- Configuration cfg = new Configuration() 1 .addResource("ltem.hbm.xml") .addResource("Bid.hbm.xml");

    I - . - Adding Entities(anrl0tated persistent classes) t o configuration object programmatically

    I

    Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 An I S 0 9001 : 2000 Certified Company I . . . . .. . . . . .

    Page 5 http://javabynataraj.blogspot.com 27

  • -- - - . ~. - ..-~- -. . - - - .- . - - - .. - - - -. - -. . -.

    I Iiibel-nate-AI-chitectul-a1 Elements . - -- -- --- --- - . - -- .. - - -

    . . ,- . . . . . - , . - . -

    MI-.SekharRectciy 1 - . . .. . .- . .. . ~ . - m.JI,X, I ,. , Configuration cfg = new Configuration()

    ..

    .addClass(org.hibernate.auction.ltem.class)

    .addClass(org.hibernate.auction.Bid.class); i i ) To add hibernate properties t o Configuration object programn~atically

    Configuration cfg = new Configuration() .addClass(org.hibernate.auction.ltem.class) .addClass(org.hibernate.auction.Bid.class) .setProperty( 'hibernate.diaIect", "org.hibernate.dialect.MySQL11~noDBDialect") .setProperty("hibernate.connection.datasource", " java:comp/env/jdbc/test") .setPr~perty("hibernate.order~updates", "true");

    This is not the only way t o pass configuration properties to Hibernate. Some alternative options include:

    1. Pass an instance of java.utiI.Properties t o Configuration.setProperties(). 2. Place a file named hibernate.properties in a root directory of the classpath. 3. set System properties using java -Dproperty=value. 4. Include elements in hibernate.cfg.xm1 (this i s discussed later).

    If you want t o get started quickly hibernate.properties is the easiest approach.

    The org.hibernate.cfg.Configuration i s intended as a startup-time object that will be discarded once - aSessionFactory I S created.

    I Q.) What i s SessionFactory? SessionFactory is an interface and SessionFactorylmpl is the implimented class It is factory of Session objects It is heavy weight object that has t o be created only once per application. SessionFactory object provides lightweight Session objects. SessionFactory is not singleton. Lets create it only once using Util/Helper class SessionFactory is a Thread safe object. You need one SessionFactory object per database. So if you are using multiple databases then you would have to create multiple SessionFactory objects. SessionFactory is also responsible for second-level caching.

    Q.) In one appl~catlon, how many SessionFactory objects I can use ? > ASessionFactory is pretty heavyweight, so, we recommend creat~ng one and caching it in a singleton type of

    way. Then, you can create as many Session objects from it as you like.

    Q.) Why SessionFactory is heavy weight? P SessionFactory encapsulates Session objects, Connections, Hibernate-properties, cashing and

    mappings. - -- - - - - - - - - - - - - - - - - - - - - -- -- - - -

    Naresh i Technologies, Opp. Satyarn Theatre, Arneerpet, Hyderabad, Ph: 040-23746666,23734842 --

    An IS0 9001 : 2000 Certified Company - -

    ~ a g e 6 - http://javabynataraj.blogspot.com 28

  • Hi bernate-Architectural Elements

    Q.) What do you know Session object?

    Session is an interface and Sessionlmpl is implemented class, both are given in orghibernate."; r Session object is called persistent manager for the hibernate application. r It i s a single-threaded(not-thread safe), short-lived object > It Wraps a JDBC connection

    r The Hibernate Session operates using a single JDBC connection which can be injected by the hibernate while constructing session object.

    I

    > It has convenience methods t o perform persistent operations.

    r It is a factory for Transaction objects r Holds a mandatory (first-level) cache of persistent objects

    I Note: After we complete the use of the Sesslon, ~t has to be closed, t o release all the resources such as associated objects and wrapped JDBC connection.

    , 4.) What i s Transaction ? -

    - ..

    r Transaction used by the application t o specify atomic units of work (Transaction management). - i Using Session Object we can create Transaction object in t w o ways.

    o Transaction transaction =Session.getTransaction(); o Transaction transction = session.beginTransaction();

    > Transaction object i s unique per session object. > Transaction interface defines following methods to deal w i th transactions.

    o transaction.begin() {Transaction beginning) o transaction. commit(); { successful transaction ending ) o transactin.ro!lback(); {un successful transaction ending )

    > Default auto commit value is false in Hibernate. r Default auto commit value is true in JDBC 3 In hibernate even t o execute one DML operation also we need t o implement Transactions. > Hibernate supprots

    o JDBC Transaction. o jTA Transaction. o Spring Transaction

    - Sample transaction code is as follows ... I - 1. Session = sessionFactory.openSession();

    I 2. Transaction t x = null; 3. tv { 4. tx = session.beginTransaction();

    I 5 . // DML operations 6. tx.commit();

    I 7. ) catch(Exception e) { - 1 I Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842

    . . . - .. - - . . . . - - .. -. .. - - .- - . . . . . - . . - -. - -

    An IS0 9001 : 2000 Certified Company -- --

    Page 7 http://javabynataraj.blogspot.com 29

  • 1 1 Hibernate-Architectural Elements . , Mr.Se1tharRecldy --=A. -- - - s -

    1 Q.) Why we have wri t ten SessionUtil class? C When some common logic i s repeat~ng across the rnul t~ple classes of an application, ~t IS better to

    1 move the common logic into some uti l class. Where ever we need that common logic we make use of

    i util class. I ! i I 0 SessionFactory is heavy weight and it's not singleton, so we should make one SessionFactory per 1 database. i i 0 Using Util /Helper class we read the configuration file only once and we create one SesisonFactory . I and we are providing fac~l i ty to get session object and t o close session object. I

    / Hibernate complete architecture Read

    ! !

    I

    class

    i'i.ypl.

    I

    configure a database driver in eclipse: !: > Launch or open MyEclipse Database Explorer prospective. In the DB Browser window right click on

    1 the white place and select "new " option. iL

    .mEC' .- , C'scatc A

    TJses i

    Scssiorl Factor?. I 1 DAI~I~: ,SC L Select driver template as oracle(thin driver), i f we are using oracle database.

    3' ......

    --

    -.. ......... ................ --- ...................-.....-.........-... - . --

    Give the driver name (logical name, which is used t o refer this configuration) 1 I 1

    Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 I 1

    An I S 0 9001 : 2000 Certified Company Page 8

    J http://javabynataraj.blogspot.com 30

  • Hibernate-Architectural E l e i ~ ~ e i ~ t s

    3 Give the connection url. I

    3 Give the username and password. I > Click on Add Jars button, then se!ect classes.jar fi le ! I- Click on save password > CIick on finish

    Hibernate Reverse engineering > Open Myeclipse database explorer prospective. i Select t he database driver which w e have created and r igh t click o n i t and select open connection 1 i It wi l l display a dialog box. Fill t he required username and password. 1

    I r Select appropriate schema where our tables are stored > Right click o n the table and select "hibernate reverse engineering" 'i The above operat ion wi l l display a dialog box i n t ha t

    I > w e need t o select the "java source folder (src)" > select t he java package and click on finish

    I

    1 Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 -.

    An IS0 9001 : 2000 Certified Company Page 9 http://javabynataraj.blogspot.com 31

  • ; Hibernate-Persiste~~t Object Lifecycle . . ." Mr.SekharReddy - I - - - , -

    1 , ,

    I Persistent Object l i fe cycle 1 Persistent Object has three life cycle states

    1. Transient state ! 2. Persistent state I 3 . Detached state I

    I (-"]new - - . - . - instance : 'L- Transient State

    --A - - - -

    I Session.get() I j Session.load() Session.save() ; Session.delete() Session.iterate() ! Session.saveOrUpdate() i

    Session. uniqueResult() Sc.ssion.persist() arb age collection I 1. B Session.scroll() 1 : : Session.merge() i

    f i

    1 I : Session.evict() Session.update()

    1 ! Session.saveOrUpdate() i : Session.clear() i t Session.merge() ~arbage'col lect ion i : Session.close() 1 Session.lock() I j Session.replicate() ,,(. ' ! /.',.

    i ; : Detached State ,

    / Persistent state

    Note:

    Life cycle\object description Transient state

    Object associate w i t h session NO

    I I Detached state I I

    -

    3 Object is associated w i th session means object reference is available to the session object

    Object present i n the database

    YES

    N 0

    9 Object present in the database means object identifier value i s available in database primary key column (Non identifier column values are not matter)

    YES

    YES

    Note: We can find the different diagrams for the persistent object life cycle as follows

    Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 An IS0 9001 : 2000 Certified Company

    Page 1 http://javabynataraj.blogspot.com 32

  • Hibernate-Persistent Object Lifecycle - - - .- - -. - - -. - -. -.

    MI-.SekharReddy I -

    I

    ,

    .--- ,-, ;

  • I .. -- .. .. -- - . --,

    I Hibernate-Persistent Object Lifecycle -- ~ r . ~ e k h a r ~ e d d T - . I - I _ m _ _ < - w - S % .. . -- ,.- i

    Transient state: An object is said t o be in transient state, when i t is not associated with session and not present in data base.

    Example: Table

    ACCOUNT

    1 ACCNO / NAME / BALANCE 1 1001 kesavareddy 1500 1 1002 1 Sekhar 2 0 0 0 1

    I I

    i Appl icat ion code: 1. Account account = new Account(); 2. account.setAccountld(1003); 3. account.setName("yellareddy"); 1 4. account.set8alance(l500); > In the above example account object is not associated with session and there is no matching record in the

    ACCOUNT table. So we can say that account object is in transient state.

    Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666, 23734842 --

    An IS0 9001 : 2000 Certified Company -- --

    ,

    Page 3 -- http://javabynataraj.blogspot.com 34

  • ' Hiberna te -~e r s i s t e l~ t Obiect Lifecvcle i

    3 In this state object is non-transactional. 1.e. object is not synchronized wi th record. 1.e. IVlodifications done to 1 1 entity, doesn't save into database.

    ( Persistent state: An object is said to be in persistence state, when it is associated wi th session as well as object present in database.

    I - ' Example: Table

    i ACCOUNT ACCNO ( NAME 16iiEF

    kesavareddy ( 1500 ' ~ - y 1 Sekhar

    I

    ' Application code:

    I Account account = (Account) session.get(Account.class,1002);

    P In the above example account object is associated with session and there is a matching record in ACCOUNT ! table. So we car: say that account object is in persistent state. I P In this state object is transactional. 1.e. the object is synchronized with database record. I P Changes made t o objects in a persistent state are automatically saved t o the database without invoking session

    1 persistence methods ' USE CASE: Explains Persistent state I

    Session session =SessionUtil.getSession(); 1 session.getTransaction()begin(); ! // 'transient' state - Hibernate i s NOT aware tha t it exists

    Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 An I S 0 9001 : 2000 Certified Company

    -- -

    Page 4. http://javabynataraj.blogspot.com 35

  • - - - -- -- - - 1 Hibernate-Pel-sistei~t Obiect Lifecvcle Mr.SekharReddv 1 / Account account = new Accoui;t(); 1 ! //transition t o the 'persistent' state. Hibernate is N O W 1 // aware of the object and will save i t to the database I session.save(account);

    1 // modification of the object will automatically be // saved because the object is in the 'persistent'state account.setBalance(500);

    i // commit the transaction session.getTransaction().co~nrnit(); I USE CASE: Explains Transient state / Session session =SessionUtil.getSession();

    sess~on.getTransaction().begin();

    1 // retrieve account with id 1. account is returned i n a 'persistentJ state , Account account = (Account) session.get(Account.class, 1);

    // transition to the 'transientJ state. Hibernate deletes the // database record, and no longer manages the object I session.delete(account); // modification is ignored by Hibernate since it is in the 'transient' state account.setBalance(500);

    // commit the transaction session.getTransaction().comrnit();

    // notice the Java object is s t i l l alive, though deleted from the database. // stays alive unti l developer sets t o null, or goes out of scope

    I System.out.println(account.getBalance());

    Detached state: An object is said to be in detached state, when the object is not associated with session but present in data base.

    Example: Table

    ACCOUNT

    I ACCNO I N A M E I BALANCE 1 1001 1 kesavareddy / 15001

    I 1002 . / Sekhar 2 0 0 0 I I I J

    Application code :

    1. Account account = new Account(); 2. account.setAccountld(1004); 3. account.setName("cherry");

    IVaresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666, 23734842 An IS0 9001 : 2000 Certified Company

    - . - -. - -- - - - - - -. - - -- --

    Page 5 http://javabynataraj.blogspot.com 36

  • Hibernate-Persistent Object Lifecycle -- Mr.Selt11arReddy I L" - - ~~-~~ -. .----A -

    4. account.setBalance(2100); 5. / /Now the account object is said t o be in transient state 6. session.save(account); 7. // NOLV the account object is said to be in persistence state

    . -,-

    I Sess ion . . . . . . .

    .....

    ... ..

    ..................

    ........

    . .

    .....> __

    I

    i I LOU2 lOUJ

    -

    9. // Now the account object is said to be in detached state. account

    .........

    . . . . . . . . . . . . . . . . . . .

    ......

    . . . .

    .,' . . ,

    -

    I => In the above example after callingsession.close() method, account object is moved to Detached state from persistent state. As session i s garbage collected, i f we try t o perform some modifications t o entity object those changes wil l not be / stored into database.

    Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 An IS0 9001 : 2000 Certified Company

    -- --

    Page 6 http://javabynataraj.blogspot.com 37

  • - ~ . .~ p-p-p-.-.----..... ~ . -~ ~. -- .. ~ .. . . . ,

    Hibernate-Persistent -- -. --- Object Lifecycle Mr.SeltharReddy ...

    ....

    . . -... - -_ _.ii_-../i

    ,-,

    => In this state object is non-transactional. Means object is not in sync with database. So Changes made to detached ' objects are not saved to the database. -,

    I i USE CASE: Explains De tached state 1 I , // retrieve account wi th id 1. account is returned i n a 'persistent' state / Account accoilnt = session.get(Account.class, 1);

    i // transition to the 'detached' state. Hibernate no longer manages the object I i session.close(); 1 I

    // modification is ignored by Hibernate since it is in the //'detached1 state, but the account sti l l represents a r o w i n the database account.setBalance(500);

    i // commit the transaction session.getTransaction().commit(); 1 USE CASE: Explains De tached s ta te / Session session1 =SessionUtil.getSession();

    i // retrieve account wi th i d 1. account is returned i n a 'persistent' state Account account = sessionl.get(Account.class, 1); I i // transit ion t o the 'detached' state. Hibernate no longer manages the object I Sessionl.close(); I I

    // modification is ignored by Hibernate since it is i n the //'detached1 state, but the account sti l l represents a r o w i n the database / account.setBalance(500); // re-attach the object to an open session, returning it t o the //'persistent1 state and allowing i ts changes t o be saved t o the database Session session2 =SessionUtil.getSession(); Session2.getTransaction(). begin(); session2.update(account);

    I 1 1 // commi t the transaction . " j' Saving Changes to the Database

    r3 Session methods do NOT save changes t o the database - save(); - update(); -- delete();

    Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666, 23734842 .-

    An IS0 9001 : 2000 Certified Company page-7- http://javabynataraj.blogspot.com 38

  • -- -. ~ -. -. ~- .

    - . - - - . - - -

    : - Hibernate-Persistent Object Lifecycle Mr.Selc11al-Reddy I .. --. .- . -. i a These methods actually SCHEDULE changes t o be made to the database

    O n c e Transaction committed, all the queries will be pushed t o the database - session.getTransaction().commit();

    The Persistence Context

    4 Each Session object contains one Persistentcontext. It might be containing the follow things: ' Graph of managed persistent instances i List of SQL statements t o send t o the database i

    I ' ~ l u s h i n g the Context

    ,! Submits the stoied SQL statements t o the database Occurs when: , - transaction.commit() is called 1 - session.flush() is called explicitly

    1 USE CASE : Scheduled Changes Session session =SessionUtil.getSession();

    ( Session.getTransaction().begin();

    // 'transient' state - Hibernate is NOT aware that it exists Account account = new Account();

    / /Transi t ion t o t h e 'persistent' state. Hibernate is NOW // aware o f the object and //schedules the insert statements t o create the object i n t he database session.save (account);

    // modif icat ion o f t he object wi l l automatically be saved scheduled //because the object is i n the 'persistent' state // (actually alters the ini t ia l insert statement since it hasn't been sent yet) account .setBalance(500);

    I // f lushes changes t o t h e database and commit the transaction session.getTransaction().commit();

    1 Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666, 23734842 - An IS0 9001 : 2000 Certified Company

    rage tr http://javabynataraj.blogspot.com 39

  • - --..- - - -. -- --- -. -

    I H [be1 nate-Session Methods Mr.SeltharReddv - i I Session m e t h o d s

    1 28. } i : public void setName(String name) { 1 31. this.name = name;

    1 I a m going to use the fol lowing ent i ty to explain the session methods. ; 1, 9ackage corn.sekharit.hibernate.entity; ! , 2. j 3. import javax.persistence.Column; , 4. ~ lnpo i t javax.pers~stence.Entity; I i 5. import javax.persistence.ld; 1 6. import javax.persistence.Table; ! 7. 1 8. @Entity

    9. @Table(name = "ACCOUNT") 1 10. p~tblic class Account ( 11. private int accountld; I 12. private String name; 1 13. private double balance;

    i 14.

    @Column(name = "BALANCE") public double getBalance() {

    return balance; I

    ,

    public void setBalance(double balance) ( this.balance = balance;

    1

    ' 15. @Id 16. @Column(name = "ACCNO") 17. public int getAccountld() ( 18. return accountld; 19. } 20.

    @Override public String tostring() {

    return "Account [accountld=" t accountld t ", name=" t name t ", balance=" t balance t "I";

    public void setAccountld(int accountld) ( this.accountld = accountld;

    25. @Column(name = "NAME") 1 26. public String getName() ( , 27. return name;

    Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 An IS0 9001 : 2000 Certified Company 1 : -

    Page 1 http://javabynataraj.blogspot.com 40

  • 4.) What are the differences between load() and get() methods?

    Hibernate Session provides two method to access object e.g. session.get() and session.load(). Both looked quite similar t o each other but there are many differences between load and get method which can affect performance of our application.

    1.) Throws "org.hibernate.0bjectNotFoundException' if object is not found in cache as well as on database. :Type hierarchy of 'org.hibernate.(3bjectNotFounilExcepti~ri ' :

    - > As we can see the ObjectNotFoundException hierarchy, we can say this is un-checked exception. .. .. So we no need to write try-catch block t o handle this exception.

    -

    / 2) It is lazy loading, rrieans when we call session.load(Class, identifier) method i t will not return entity object, it will ,

    return proxy object. When we try t o access the non-identifier properties from the proxy object, at that time it will hit 1 i the database and load the entity object.

    i 3) As Session.load()return proxy instance, so it is not fully available in any future detached state.

    I 4) Use this method if i t is sure that the objects exist. 5) It is just like EntityManager.getReference0 method of .lPA i

    I

    1) It will return 'null'value, if object is not found on cache as well as on database.

    I 2) It is early loading, Means when we call session.load(Class, identifier) method it will hit the database immediately and i load entity object and return entity object. I

    3) As Session.get() returns a fully initialized instance, so i t is fully available in any future detached state. I

    , 4) Use this method if i t is not s u e that the objects exist. I I 5 ) It is just like EntityManager.find() method of JPA 1 ' NOTE: If working with detached objects is not needed, load() or getReference() can be used to have better 1 performance.

    Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 An IS0 9001 : 2000 Certified Company

    Page 2 http://javabynataraj.blogspot.com 41

  • H i bei-nate-Session Methods -,

    I NOTE: Session.load() or EntityManager.getReference() should be used i f a fully initialized instance is not needed, wh i ch I

    , saves a database roundtrip i f nothing other than creation of an association is done, wi th the proxied instance in

    --

    rnailaged state

    NOTE: load() method exists prior t o get() method which is added on user request. .',

    4.) HOW to call get and load methods ? : 50. public void callload(){

    51. Session session = SessionUtil.getSession(); j _ 52. session.beginTransaction(); 53. try { i

    1 54. Account account = (Account) session.load(Account.class,9001); 1 55. / / ~ t this line put Break.point ... Now observe the console, After this line executed, i I

    56. / /we can't find any select statement. And i f observe on the variables window, account object not initialized. ' 57. // Now account is just a proxy object. ! 58. i 1 59. System.out.println(account.getName()); I 60. //After this line yo" can find select query on the console, And now account object is initialized with database data. 1 1 61. ( . 62. } catch (ObjectNotFoundException e) { 1

    // System.out.println(account.getName{)); //This would fail!!!

    publicvoid callGet() { Session session = SessionUtil.getSession(); session. beginTransaction0; Account account = (Account) session.gct(Account.class,9001); // At this line put ~ r e a k .p'oint... Now observe the console, After this line executed, / /we can find select statement. And if observe on the variables window, //account object initialized with database data

    // System.out.println(account.getName()); // no problem!!!

    W h e n t o use Session ~ e t 0 and load0 i n Hibernate

    1. i f object present we have t o implement some logic, i f not we need t o implement some other logic. I get(): i f the object is not there, it returns null. Then we can implement above requirement as follows I if(object == null){

    //some code

    I Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 L -- -- - -- An IS0 9001 : 2000 Certified Company I J -

    Page 3 http://javabynataraj.blogspot.com 42

  • ~ ~

    ~p p~ - .... . -

    . . Hibernate-Session Methods Mi-.Sel

  • . . - - -- . ~ . -~ ~. . -- - -.. . - . . - -

    > . : Hibernate-Session Methods Mr.Sel

  • Application code:

    ~ .- -...-p---p-pp-.-..p..-- .

    Hibernate-Session Methods . , . . - -.

    Mr.SeltharRecidy ---- . .

    . .. w

    Table: ACCOUNT

    1. Session session = SessionUtil.getSession(); 2. session.getTransaction().begin(); 3.

    i 4. Account account = new Account(); I 5. account.setAccountld(1001);

    6. account.setNarne("selthar Reddy"); I 1 7. account.setBala1ice(8200.00);

    8. 9. session.saveOrUpdate(accour~t);

    ' 10. 11. session.getTransaction().commit(); I 12. ! i 13. //Now saveorupdate() internally class update(). Because the record with 9001 id i s already exists in the database. i

    !=NO

    , I -

    Table: i

    I ACCOUNT

    I 1001 6800 1 1 NAME

    I ACCNO / NAME I BALANCE )

    B AL

    1 1001 I rekhar Reddy 1 8200 1 I public Connection close0 throws HibernateException; I I

    Once the transaction is completed we need t o close the session. When we close the session all the associated objects I ! w i th the session will be de-associated f rom session and associated JDBC connection also closed. It is not strictly necessary to .

    close the session but you must at least disconnect() it. i

    ' I public void clear(); I

    This method is used t o de-associate all the objects f rom session. 1 Table: ACCOUNT

    1002 Kesavareddy 9500

    1 Application code: 1. Session session = SessionUtil.getSession(); 1 2. session.getTransa~tion(/begin();

    - 3. 4. Account accountl = (Account)session.get(Account.class,1001); 1 5. Account account2 = (A~~ount)session.get(Account.cla~~,1002~;

    I 6. // Now accountl and account2 objects are in persistent state. 1 7.

    8. accountl.setName("new sekhar"); 1 9. account2.~etName("new kesavareddy"); 10.

    1 Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 I An IS0 9001 : 2000 Certified Company -- A

    Page G http://javabynataraj.blogspot.com 45

  • ~

    pp ~~ .~ / Hibernate-Session Methods - . .. -. , . Mr.SekharReddy --::

    I ---- ! -. 1 11. session.clear(); I

    I 12. //Now account1 and account2 objects are in detached state. ! - ! 13. / 14. session.getTransaction().conimit(); 1 ~,

    1. Session session = Sess~onUtil.getSession(); 2. session.getTransaction().begin(); 3. 4. Account accountl = (Account)session.get(Account.class,1001); 5. Account account2 = ~Account)session.get(Account.class,1002); 6. // Now accountl and account2 objects are in persistent state. 7. 8. session.clear(); 9. //Now accountl and account2 objects are in detached state. 10. 11. accountl.setName("new sekhar"); 12. account2.setName("new kesavareddy"). 13. 14. session.getTransaction().commit();

    Af ter execution:

    ACCOUNT

    ACCNO BALANCE

    sekhar

    kesavareddy

    1 I i i n the above example, when w e call session.clear() method, account l and account2 objects wil l be de-associated ) f rom the session object. i.e. account1 and account2 objects are moved f rom persistent state t o detached state. I

    9 Now accoun t l and account2 are in non-transactional state. So even we are committ ing the transaction the modif ied I

    values o f account1 and account2 are not updated i n the database. i I

    / publ ic void evict(0biect object) throws HibernateException: i This method is used de-associates the specified object f rom session. Table: ACCOUNT I ACCNO BALANCE 1 I 1 001 sekhar

    1002 kesavareddy 9500 1 I I I I

    Application code:

    1. Session session = SessionUtil.getSession(); r

    4. Account account1 = (Account)session.get(Account.class,1001); 1 ,

    5. Account account2 = (Account)session.get(Account.class,1002);

    Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 I 1

    An IS0 9001 : 2000 Certified Company Page 1 - I - http://javabynataraj.blogspot.com 46

  • H ibei-i~ate-Session Methods I - - __I. -- -- Mr.SeltharRedcly . 1 u r i

    6. // Now accountl and account2 objects are in persistent state. I 7. ' 8. accountl.setName("new sekhar");

    1 9. acco~1nt2.setName{"1iew kesavareddy"); 10.

    , 11. session.evict(account1); 1 12. // Now accountl in detached state and account2 in persistent state.

    13. j 14. session.getTransaction().commit();

    i Af ter Execution: ACCOUNT I ACCNO I NAME 1 BALANCE I 1 1001 I sekhar 1 8400 1

    I 'i In the above example when w e call session.evict(account1) account l object wi l l be de-associated f rom sesslon ,

    I

    I object. - 9 After calling transaction.commit(), only account2 object will be updated. Because i t is in persistent state.

    i 'i evict() is used to de-associate specified object f rom the session object. 1002 1 new kesavareddy

    -

    ! 1 public boolean contains(0bject obiect);

    9500 ~

    I It is used t o check whether the object is associated with session or not. I

    I I I Application code: I

    I

    1. Session session = SessionUtil.getSession(); I 2. 3. Account account = (Account)session.get(Account.class,1001); I 4. System.~ut.print ln(~'After calling get() method1');

    ' 5. \ 6. if(session.contains(account)){ . , 7. System.out.println("account Is associated with session");

    8. } else{ I 9. System.out.println("account i s not associated with session"); 10. } I 11. 12. session.clear(); 13. System.out.println("After calling clear() method"); 1 14. 15. if(session.contains(account)){ 1 16. Systeni.out.println("account Is associated with session"); 17. } else{ 1 18. System.out.println("account is not associated with session");

    - 19. } I i

    publ ic boolean isConnected(L

    I To check weather there is a connection is associated wi th the session or not.

    1 Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 An IS0 9001 : 2000 Certified Company

    >

    Page 8 http://javabynataraj.blogspot.com 47

  • .- ~ .p..-p---p--.----... . . . . - .~.~- ~- -.~ Hibernate-Session Methods Mr.Sel
  • _ Hi bel-nate-Session Methods I _

    Mr.SeltharReddy . - --

    1 Eg:

    Session session = SessionUtil.getSession(); Transaction tx = session.beginTransaction();

    for ( int i=O; i

  • . - -. - - - - -

    Hibernate-session Methods ~ i - . ~ e l t h a r ~ e d c i y -\

    3. 4. Account account = (Account) session.get(Account.class, 1001); 5. System.out.println("Before updating the database..."), 6. System.out.pr~ntln("Name : " + account.getNanie()); 7. System.out.println("Balance : " + account.getBalance()); 8.

    ,

    9. // Break .point. go t o database and modify the data 10. ACCOUIVT

    I 1 1001 sekhar new 1 9500 7 / ACCNO ( NAME I 1

    11. System.out.println("After updating the da t~base ..."); 12. System.out.println("Name : " + account.getName()); 13. System.out.println("Balance : " + account.getBalance()); 14. 15. session.getTransaction().commit(); 16. 17. session.close();

    BALANCE 1

    1 Output: Before updaticg the database ... Name : sekhar Balance : 8400.0 After ~~pda t i ng the database ... Name : sekhar Balance : 8400.0

    1 Explanation: > When we call the get() on session object, it will h ~ t the database and get the data from the database and creates -

    entity object and assign the retrieved data t o entity object. And finally that entity object will be cached on the session object. I When we update the data o n the database i t will not get the updated data. Just it always shows session cached I data.

    , I

    I CaseZ: w i th single session, multiple t imes calling get() method: Table: ACCOUNT

    I I ACCNO 1 NAME 1 BALANCE

    L . , -- Page 11

    I

    Application code:

    1. Session session = SessionUtil.getSession(); 2. session.getTransaction().begin(); 3. 4. Account account = (Account) session.get(Account.class, 1001); 5. System.out.println("Before updating the database...");

    Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 An IS0 9001 : 2000 Certified C o m ~ a n v

    I I

    1001 sekhar 8400

    http://javabynataraj.blogspot.com 50

  • Hibernate-Session Methods - - - - --- - - MI-.SeltharReddy -- li

    8. 9. // Break ..p oint ... go to database and mod~fy the data 10. ACCOUNT

    m] NAME I 1 BALANCE 1 /-tsekhar new

    1

    9500

    / 11. account = (Account) session.get(Account.class, 1001); 12. System.out.println("After updating the database ...") ;

    '

    13. Systcm.out.println("Name : " + account.getName()); 14. System.out.println("Balance : " + account getBalance0);

    I 15. 16. session.getTransaction().cornmit();

    I 17. 18. session.close();

    - Output: I I Before updating the database ...

    Name : sekhar -1 Balance : 8400.0

    After updating the database ... I Name : sekhar

    Balance : 8400.0

    / Explanation: > When we call the get() on session object(second time), it will check whether the object is available in session or

    not. If the object is available in session, it will not hit the database. > In above example with Accno 1001 already account object i s already available in session object. That's why even

    we call get() method on session object 2nd time, it will not hit the database. That's why it didn't display the updated record data of database, instead it displayed previous data only.

    Case 3: creating multiple sessions.

    Table: ACCOUNT

    1 ACCNO 1 NAME 1 BALANCE 1 ) 1001 I sekhar 1 8400 1 I I I I

    Application code:

    1. Session session1 = SessionUtil.getSession(); 2. Session session2 = SessionUtil.getSession(); 3. 4. Account account = (Account) sessionl.get(Account.c~ass, 1001); 5. System.out.println("Before updating the database..."); 6. Systern.out.println("Name : " + account.getName()); 7. Systern.out.println("Balance : " + account.getBalance());

    Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 An IS0 9001 : 2000 Certified Company

    http://javabynataraj.blogspot.com 51

  • ~ - - - . - - -- --- - -- . . - . . . . .. -- - . - ~ . ~- .-.

    I Hibernate-Session Methods Mr.Sel

  • Hibernate-Session Methods - - -- -- - --- - -

    - ..,

    Mr-SekharReddy ' -2

    v-1 sekhar new 1 9500 I 9. session.refresh(account);

    I lo. System.out,println("After updating the database ..."); 11. System.out.println("Name : " + account getName()); 12. System.out.println("Balance : " + account getBalance0);

    ! Output: I

    I Before updating the database ... I I Name : sekhar

    Balance : 8400.0 ' After updating the database .. , Name : sekhar new 1 Balance : 9500.0 I ' Explanation:

    I > In the above example when we call refresh(), Hibernate compares database data and object data. If it finds any 1 - difference it will again execute select query and update the object data.

    -

    i public Obiect mergejobiect obiect) throws HibernateException; Consider the following example,

    Table: ACCOUNT

    Application Code:

    ACCNO

    1001

    1. session.getTransaction().begin(); 2. 3. Account accountl=(Account)session.get(Account.class, 1001); 4. 5. Account account2= new Account(); 6. account2.setAccountld(1001); 7. account2.setName("cherry"); 8. account2.setBalance(6500); 9. 10. session.update(account2); 11. 12. session.getTransaction~).commit();

    , Output: org.hibernate.NonUnique0bjectException: a different object with the same identifier value was already

    NAME

    sekhar

    1 associated with the session: [com.sekharit.hibernate.entity.Account#lOOl] I

    BALANCE

    8400

    1 Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23745666,23734842 I-

    An IS0 9001 : 2000 Certified Company ---- -. -- .-

    Page 14 http://javabynataraj.blogspot.com 53

  • - - - - -. .- -- - -~ -p--.--p---..---.-.---..p.- ~. .. - -p -. -- - .- ~~ < Hibernate-Session Methods Mi-.Sel In the above example, by calling get() method account1 object with identifier '1001' will be there in session. And by calling update() method account2 object with identifier '1001' is also trying t o come into session object. It is

    I

    I the problem. To avoid this we will go for merge().

    :z e :% 15: 1 1 1 1 rl .#:I - ~t 1:: .:I .

    3: e :z: 5. I 13 i-1 -1-4 111 114 ate 1:: 11 I

    I

    I I

    I

    > In the above example, If we use merge() method instead of update() method, we won't get exception. Just I 1

    I I

    i 9 We can't place two different objects(of same type) with the same identifier in the sesslon object.

    --

    _--------

    --

    ----

    .-

    /- I: .3 11: I: CI I-A r~t .I I: -1 111 111 -1 ;I 'I--. '-._

    /- .->' -'-. --,,-

    ----..

    -- - _--

    ''------

    ---- --

    ,/-- --. -. ( 13i:~ilL.~rlt2

  • - .- - - - - - - - - - -- - -- - - - - - - . - -- -

    Hibernate-Session Methods Mr.Sel

  • , ..__ .- . . ---.--~-- - .-- .~,

    ' Hibernate-Session Methods I -

    Mr.SekharReddy .- .L - , : I

    I ,-, 1

    1 5. 1 6. Account account2= new Account(); - ..

    1 7. account2.setAccountld(1001); i 8. account2.setNarne("kesavareddy"); . ~

    9, account2.setBalance(6500); i I 10. /--. , 11. session.merge(account2];

    12. I . . i 13. session.getTransaction().commit(); j 14. session.close(); 1 After execution: ACCOUNT

    ACCNO BALANCE

    yellareddy

    I I , In the above example, Before llth line; accountl is in Persistent state, and account2 in detached state. I . - , - . , / > In the above example, when we call merge() method it will check, weather there i i any object associated with

    the session with same identifier(1001). - > In our example, accountl#1001 object is already associated with session, So merge() method now, Copy the I

    < - .

    state of accoun2#1001 object state into accountl#1001 object. After llth line also, account1 is in Persistent , j state, and account2 in detached state.

    1 3 When the transaction is committed, As acountl#lOOl(Persistent-state) data is modified, so i t will hit the update I ! query, t o update session data with database.

    Q) What is the difference between merge and update? i i

    update () : When the session does not contain an persistent instance with the same identifier, and if i t is sure use update I for the data persistence in hibernate.

    i I

    merge (): Irrespective of the state of a session, i f there is a need t o save the modifications at any given time, use I

    merge(). !

    , public Serialiiable getldentifieriobiect object) throws HibernateException; I To know the object identifier value at the runtime, we need to call getldentifierfobject object) I Application code: 1

    I Account account = (Account)session.get(Account.class,1001); I Serializable id = session.getldentifier (account);

    System.out.println("Identifier of Account is : "+ id); '1 1

    Transaction methods: I

    Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 1 An I S 0 9001 : 2000 Certified Company ---

    I- Page 17- http://javabynataraj.blogspot.com 56

  • -- -- - - - - - -- - - - - -pp.--p-- -

    - Hi bernate-Sessio~~ Methods Mr.Sel

  • -- - -- . . - -. -

    Hibernate-Session Methods MrSekharReddv --'

    Account account = (Account) session.get(Account.class, 1001); System.out.println("After get() method"); if (session.contains(account)) {

    Systeni.out.println("associated"); 1 else i

    System.out.println("not-associated"); 1

    session.evict(account); System.out.println("After evict() method"); if (session.contains(account)) {

    System.out.println("associated"); } else {

    System.out.println("not-associated"); }

    session.replicate(account, ReplicationMode.LATEST-VERSIOIV); Systern.out.println("After replicate() method"); i f (~ession.contains(account)) {

    System.out.println("associated"); } else {

    System.out.println("not-associated");

    1 public void IockiObiect obiect, LockMode IockMode) throws HibernateException; i I If we are updating some group of tables no other person is allowed to update the records on the same table until our I work is completed. So using lock(), i f we lock the record i t doesn't allow updating from different users till we commit the I transaction. 1 Hibernate defines Several lock modes I P LockMode.NONE : Don't go to the database unless the object isn't in either cache. I I 3 LockMode.READ : Bypass both levels of cache, and perform a version check to verify the object in memory is

    the same version as that currently exits in the databse. ! 1 P LockMode.UPGRADE: Bypass both levels of cache, and perform a version check and obtain a database-level

    I I I pessimistic loc upgrade lock, i f that is supported. I I I P LockMode.UPGRADE-NOWAIT: same as UPGRADE , but use a SELECT .... FOR UPDATE NOWAIT on Oracle. This disables waiting for concurrent lock releases, thus throwing a locking exception can't be obtained. I I

    -

    9 LockMode.WRITE: Is obtained automatically when Hibernate has written t o a row in the current Transaction.

    I This is an internal mode and can't bespecified explicitly. 1 I NOTE: this method got deprecated in Hibernate 4.x version I I

    I Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 i h. An IS0 9001 : 2000 Certified Company I -

    pa e 1 F ' http://javabynataraj.blogspot.com 58

  • . ~ ~ - ~ ~ . A ~ ~ - . ~ - . ~

    Hibernate-Multi Database Communication By Mr. SeltharReddy

    1 Q.) How to work with MYSQL database? ! I

    install the MYSQL database. I C? Select All Programs 3 MYSQL 3 MYSQL 5.0 3 mysql command line client

    I Give password i 4. In the MYSQL prompt give the following comr-riands

    o Create database mydb I o Use mydb I ! ! 6 Now perform database operations normally.

    I C When you open mysql command line client again just give password, and give use mydb command. (don't give !

    create database mydb) i I I

    ' Q.)How t o connect t o mul t ip le Databases using Single Configuration File in Hibernate? I

    I OracleDataBase Table: 1 I I SQL> desc account;

    i Name Null? TY pe I - - - - - _ - - - - _ - - - _ - - - - -- - - - - - - - - - - - - - - - - - - - - _ _ _ _ _ - _ - _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ -

    1 ACNO IVUMBER(5)

    i BAL NUMBER(8,2) 1 IVaresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666, 23734842 I An I S 0 9001 : 2000 Certified Company -

    Page http://javabynataraj.blogspot.com 59

  • , ~~~ .-

    ~ ~ ~

    ~. ~ ~ .

    I Hibel-nate-Multi Database Commu~~ication I --- By Mr. SeltharReddy - . . . .a . .'i -\ 1 M y S Q L D a t B e Table

    ; + ----.-. + -.-----.-- + ----.- +- - - - - +-- --------- + ---

  • ~. .~ .~ ...................................... . . ~~ - -. . . - - ~

    - ~ Hibernate-Multi Database Communication 7 By Mr. SekharReddy I

    1. package com.neo.hibernate.dao; 2 . 3. import crg.hibernate.Session; 4. lrilport org. hibernate. SessionFactory; 5. import org. hibernate. cfg . C ~ n f iguration; 6. 7. import com.neo.hibernate.util.Conn~ctionUti1; 8. import com.neo.hibernate.vo.Account; 9. 10. public class PracticeDao { 11. public static void main(String[] args) { 12. 13. Configuration configuration = new Configuration(); 14. configuration.configure("com/neo/hibernate/config/hibernate.cfg.xml"); 15. SessionFactcry factory = configuration.buildSessionFactory(j; 16. / / Oracle 17. Sesslon oracleSession = 18. factory.openSession(ConnectionUtil.getOracleConnecti~n()); 19. Account oracleAccount = (Account) 20. oracleSession.get(Account.class, 1001); 21. System.out.println("0racle Account table details . . . . " ) ; 22. System.out.println("Accno : "+oracleAccount.getAccno()); 23. System.out.println("Name : "+oracleAccount.getName()); 24. System.out.println("Ba1ance : "+oracleAccount.getBalance() ) ; 25. //Mysql 26. Session mysqlSession = 27. factory.openSession(ConnectionUtil.getMysqlConnection() ) ; 28. Account mysqlAccount= (Account)mysqlSession.get(Account.class, 1001); 29. System.out.println("Mysq1 Account table details . . . . " ) ; 30. System.out.println("Accno : " -1 -mysq lAccoun t .ge tAccno( ) ) ; 31. System. out. println ("Name : "+mysqlAccount. getName ( ) ) ; 32. System.out.println("Balance : "+mysqlAccount.getBalance()); 33. 34. 1 35. ) 36.

    ConnectionUtil.iava 1. package com.neo.hibernate.ut11; 2. 3. import java . sql .Connection; 4. import java.sql.DriverManager; 5. lmport java.sql.SQLException; 6. 7. public class ConnectionUtil { 8. static { 9 . try { 10. Class.forName("oracle.jdbc.driver.OracleDriver~'); 11. Class.forName("com.mysql.jdbc.Driver"); 12. 1 catch (Exception e) { 13. e.printStackTrace0; 14. 1 15.

    I Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666, 23734842 i An IS0 9001 : 2000 Certified Company I 1.-

    Page 3 http://javabynataraj.blogspot.com 61

  • .- ~~ ~ -

    ~- .

    ( Hibernate-Multi Database Coi~~munication -- By Mr. SekharReddy --- - -- .- ..-?I 1 , ., .

    ': 16. 1 ,I

    public static Con~ectioc get0racleConnection() ( Connection ~ j i 1 i i - j ~ ~ i , 3 : i = 11~11; try (

    connection = Driv?rManager.getConnection( "jdbc:oracle: t h i r : : Plocalhost: 1521:XEW, "system", } catch (SQLExcepcion e) (

    e. printStaekTrac? ( ) ; 1

    return connection; 1

    public static Connection ge~MysqlConnection() { Connection connection = null; try {

    connection = DriverManager.getConnection( "jdbc:mysql://loca1host:33O6/mydb", "root",

    ) catch (SQLException e) { e . printStackTrace ( ) ;

    1 I 37. return connectlon; 1 3 8 . ( 39. ' 4 0 . 1 I

    "tiger") ; 'I I I

    i Account.hbrn.xm! 1 1. c?xml version="l. 0" encoding="UTF-8"3'. !

    1 2. < ! DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3 . O / / E l l r ' ! "http://hibernate.sourceforge.neL/!i1berate-mapping-3.O.dtd" >

    3. 4 . 5 . 6. 7. 8 . 1 4. 5. I 6. org.hibernate.dialect.OracleDialect - I 7.

  • ~ i b e r n a t e - ~ u l t i Database Con~munication Bv M r . SelcharReddv

    ~ r a c l e ~ a t a ~ a s e Table: i SQL> desc account; 1 Name Null? TY i 1

    ......................................... -------- -----------------

    ACNO NUMBER(5)

    NAME VARCHAR2(10)

    BA L NUMBER(8,2)

    1 ( Field I Type I Null I Key ( Default I Extra ( + ------- + ---------- + ------ + ----- + --------- + ------- +

    I I acno 1 int(5) I YES I I NULL 1 I I ( name ( char(l5) I YES ( ( NULL I 1 I

    ( bal 1 f loat 1 YES I I NULL 1 1

    ' Account.iava

    ! Naresh i Technologies, Opp. Satyam Theatre, Ameerpet, Hyderabad, Ph: 040-23746666,23734842 I An IS0 9001 : 2000 Certified Company

    Page 5- http://javabynataraj.blogspot.com 63

  • . . . . . - . . . ~ -.,

    I Hibernate-Multi Database C o ~ ~ ~ ~ ~ ~ u i ~ i c a t i o n - .. .. - . . - - --- By -- Mr. SeltharReddy - -1 - , - . .

    -- I ,,I

    1 . package corn. ne2. h ibe rna t e . i-c; 2 . 3 . p u b l i c c l a s s Account { 4. p r i v a t e i n t accno; 5 . p r i v a t e S t r i n g n a m ? ;

    : 6 . p r i v a t e double ba lance ; 7 . 8 . p u b l i c i n t gethccno ( ) i

    1 9 . r e t u r n accno; i 1 0 .

    i 1 1 . / 1 2 . p u b l i c void set,?ccnc ( i n t ?:cn.:?) :

    1 3 . t h i s . accno = -::I::: ; 1 4 . ?

    ; 1 5 . 1 1 6 . p u b l i c S t r i n g getName() { 1 1 7 . r e t u r n name; 1 1 8 . )

    1 9 . : 2 0 . p u b l i c void setName ( S t r i n g nan~e j { j 2 1 . this .name = nasa; i 2 2 . 1 i 2 3 . 1 2 4 . p u b l i c double ge tBa l ance0 ( ! 2 5 . r e t u r n belance; i 2 6 . 1 i 2 7 . j 2 8 . p m l i c void setBalance (double i ialance) i i 2 9 . t h i s . balance = halance; 1 3 0 . 1 : 3 1 . 1 3 2 . )

    PracticeDao.iava 1. package com.neo.hib?rnate.dao; 2 . import 0rg:hibernate. Sessj-on; 3. import com.neo.hibernate.util.SessionUti1; 4. import com.neo.hibernate.vo,Account; 5 . 6 . public class PracticeDao { 7 . public static void main(String [ I args) { 8. / / Oracle 9. Session oraclesession = SessionUtil.getOracleSession(); 1 0 . Account oracleAccount = (Account)oracle