SlideShare une entreprise Scribd logo
1  sur  43
Télécharger pour lire hors ligne
Basic

Fundamentals

Hibernate: An Introduction
Cao Duc Nguyen
nguyen.cao-duc@hp.com

Software Designer
HP Software Products and Solution

May 3, 2012

Conclusion
Basic

Fundamentals

Talk Outline

1

Basic
Getting Started
Problem
Challenges

2

Fundamentals
Concepts
Data Model
Persistent Lifecycle
HQL
Architecture

3

Conclusion

Conclusion
Basic

Fundamentals

Getting Started

Setting up the Environment

JDK
Ant/Maven
MySQL/PostgreSQL/Oracle, etc.
JDBC
Eclipse Hibernate Tools

Conclusion
Basic
Getting Started

Hibernate ORM distribution

Fundamentals

Conclusion
Basic

Fundamentals

Conclusion

Problem

Hibernate - Definitions

by Hibernate.org
Hibernate is concerned with helping your
application to achieve persistence. . . Persistence
simply means that we would like our application’s
data to outlive the applications process. . . would
like the state of (some of) our objects to live
beyond the scope of the JVM so that the same
state is available later.
by Wikipedia.org
Hibernate is an object-relational mapping (ORM)
library for the Java language, . . . a framework for
mapping an object-oriented domain model to a
traditional relational database . . .
Basic
Problem

Traditional View

Fundamentals

Conclusion
Basic
Problem

Traditional View (cont.)

Fundamentals

Conclusion
Basic
Problem

Hibernate View

Fundamentals

Conclusion
Basic

Fundamentals

Challenges

Two Different Worlds

Object-Oriented Systems
System composed of objects interacting with each other
Objects encapsulate data and behaviors
Relational Databases
Data is stored in tables composed of rows

Conclusion
Basic

Fundamentals

Challenges

Obstacles

Identity
Granularity
Associations
Navigation
Inheritance & Polymorphism
Data type mismatches

Conclusion
Basic

Fundamentals

Conclusion

Concepts

Plain Old Java Object (POJOs)

In general, a POJO is a Java object not bound by any restriction
other than those forced by the Java Language Specification.
However, due to technical difficulties and other reasons, in the
context of Hibernate, a POJO is defined as follow:
No-argument class constructor
Property accessor (get/set) methods
Class is not declared final nor has final methods.
Collection-typed attributes must be declared as interface
types.
Basic

Fundamentals

Conclusion

Data Model

Example Application: EventApp

Event-management application used to manage a conference
with speakers, attendees, and various locations, among other
things.
Basic
Data Model

An Example: EventApp

Fundamentals

Conclusion
Basic

Fundamentals

Conclusion

Data Model

Identity Mapping

<id name="id" column="id" type="long">
<generator class="native"/>
</id>
Mapped classes must declare the primary key column of
the database table.
Generators using the native class will use identity or
sequence columns depending on available database
support. If neither method is supported, the native
generator falls back to a high/low generator method to
create unique primary key values.
The native generator returns a short, integer, or long value.
Hibernate documentation about Identity mapping here.
Basic

Fundamentals

Conclusion

Data Model

Property Mapping

<property name="startDate" column="start_date"
type="date"/>
A typical Hibernate Property mapping defines a POJO
property name, a database column name, and the name of
a Hibernate type, and it is often possible to omit the type.
Hibernate uses reflection to determine the Java type of the
property.
Details about Hibernate Types mapping here.
Hibernate documentation about Property mapping here.
Basic

Fundamentals

Conclusion

Data Model

Entity Mapping

<class name="Event" table="events">
<!-- define identity, properties, components,
collections, associations here... -->
</class>
A typical Hibernate Entity mapping defines a POJO class
name, a database table name.
By default, all class names are automatically “imported”
into the namespace of HQL
Hibernate documentation about Entity mapping here.
Basic

Fundamentals

Conclusion

Data Model

Component Mapping

<component name="componentName"
class="componentClass">
<!-- defines properties of the component here
these properties will be mapped to columns of
the enclosing entity-->
</class>
A Hibernate Component mapping is defined within an
Entity mapping several objects into one single table of the
enclosing entity.
Hibernate documentation about Component mapping here.
Basic

Fundamentals

Data Model

Put it all together
Hibernate Mapping files:

The Event.hbm.xml mapping file

Conclusion
Basic

Fundamentals

Data Model

Put it all together (cont.)

The Location.hbm.xml mapping file

Conclusion
Basic

Fundamentals

Data Model

Put it all together (cont.)
Hibernate Configuration hibernate.cfg.xml file:

Conclusion
Basic

Fundamentals

Conclusion

Data Model

Collection Mapping

Common Collections: sets, lists, bags, maps of value types.
Value Type:
An object of value type has no database identity; it belongs
to an entity instance, and its persistent state is embedded
in the table row of the owning entity
Value-typed classes do not have identifiers or identifier
properties
Basic

Fundamentals

Data Model

Collection Mapping (cont.)

Hibernate persistent collections

Conclusion
Basic

Fundamentals

Data Model

Collection Mapping (cont.)

Example of persisting collections

Conclusion
Basic

Fundamentals

Data Model

Inheritance Mapping

Table per concrete class with union:

Conclusion
Basic

Fundamentals

Data Model

Inheritance Mapping (cont.)

Table per class hierarchy:

Conclusion
Basic

Fundamentals

Data Model

Inheritance Mapping (cont.)

Table per subclass:

Conclusion
Basic

Fundamentals

Conclusion

Persistent Lifecycle

Object States

Transient
The object is not associated with any persistence
context. It has no persistent identity (primary key
value).
Persistent
The object is currently associated with a
persistence context. It has a persistent identity
(primary key value) and, perhaps, a corresponding
row in the database. Hibernate guarantees that
persistent identity is equivalent to Java identity.
Basic

Fundamentals

Conclusion

Persistent Lifecycle

Object States (cont.)

Detached
The instance was once associated with a
persistence context, but that context was closed,
or the instance was serialized to another process.
It has a persistent identity and, perhaps, a
corrsponding row in the database. For detached
instances, Hibernate makes no guarantees about
the relationship between persistent identity and
Java identity
Basic
Persistent Lifecycle

State Transition Diagram

Fundamentals

Conclusion
Basic

Fundamentals

Conclusion

Persistent Lifecycle

Case 1: Making an object persistent
Item item = new Item();
item.setName("Playstation3 incl. all accessories");
item.setEndDate( ... );
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Serializable itemId = session.save(item);
tx.commit();
session.close();
Basic

Fundamentals

Conclusion

Persistent Lifecycle

Case 2: Retrieving a persistent object
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Item item = (Item) session.load(Item.class,
new Long(1234));
// Item item = (Item) session.get(Item.class,
// new Long(1234));
tx.commit();
session.close();
Basic

Fundamentals

Conclusion

Persistent Lifecycle

Case 3: Modifying a persistent object
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Item item = (Item) session.get(Item.class,
new Long(1234));
item.setDescription("This Playstation is
as good as new!");
tx.commit();
session.close();
Basic

Fundamentals

Conclusion

Persistent Lifecycle

Case 4: Making a persistent object transient

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Item item = (Item) session.load(Item.class,
new Long(1234));
session.delete(item);
tx.commit();
session.close();
Basic

Fundamentals

Conclusion

Persistent Lifecycle

Case 5: Reattaching a modified detached instance
// Loaded in previous Session
item.setDescription(...);
Session sessionTwo = sessionFactory.openSession();
Transaction tx = sessionTwo.beginTransaction();
sessionTwo.update(item);
item.setEndDate(...);
tx.commit();
sessionTwo.close();
Basic

Fundamentals

HQL

Query

HQL Query:

HQL SQLQuery:

Conclusion
Basic
HQL

Parameter Binding

Fundamentals

Conclusion
Basic

Fundamentals

HQL

Joins
Join:

Left Join:

Conclusion
Basic

Fundamentals

Conclusion

HQL

Criteria API

Some developers prefer to build queries dynamically, using an
object-oriented API, rather than building query strings.
Hibernate provides an intuitive org.hibernate.Criteria
represents a query against a particular persistent class:
Basic

Fundamentals

HQL

DetachedCriteria
A DetachedCriteria is used to express a subquery.

Conclusion
Basic

Fundamentals

Architecture

Structural Components

More in depth explanation can be found here.

Conclusion
Basic

Fundamentals

Architecture

Hibernate Flexibility and Extendibility

Extension points:
Dialects (for different databases)
Custom mapping types
ID generators
Cache, CacheProvider
Transaction, TransactionFactory
PropertyAccessor
ProxyFactory
ConnectionProvider

Conclusion
Basic

Fundamentals

Why Hibernate?

Free, open source Java package
Release developers from data persistent related tasks,
help to focus on objects and features of application
No need for JDBC API for Result handling
Database almost-independence
Efficient queries

Conclusion
Basic

Fundamentals

THANK YOU *-*

Conclusion

Contenu connexe

Tendances

Java Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By StepJava Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By Step
Guo Albert
 
jpa-hibernate-presentation
jpa-hibernate-presentationjpa-hibernate-presentation
jpa-hibernate-presentation
John Slick
 
Hibernate complete Training
Hibernate complete TrainingHibernate complete Training
Hibernate complete Training
sourabh aggarwal
 
Hibernate Presentation
Hibernate  PresentationHibernate  Presentation
Hibernate Presentation
guest11106b
 
Hibernate Tutorial
Hibernate TutorialHibernate Tutorial
Hibernate Tutorial
Syed Shahul
 

Tendances (20)

Hibernate
HibernateHibernate
Hibernate
 
Hibernate in Nutshell
Hibernate in NutshellHibernate in Nutshell
Hibernate in Nutshell
 
Java Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By StepJava Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By Step
 
jpa-hibernate-presentation
jpa-hibernate-presentationjpa-hibernate-presentation
jpa-hibernate-presentation
 
Introduction to JPA Framework
Introduction to JPA FrameworkIntroduction to JPA Framework
Introduction to JPA Framework
 
Hibernate Basic Concepts - Presentation
Hibernate Basic Concepts - PresentationHibernate Basic Concepts - Presentation
Hibernate Basic Concepts - Presentation
 
Spring (1)
Spring (1)Spring (1)
Spring (1)
 
Hibernate ppt
Hibernate pptHibernate ppt
Hibernate ppt
 
JPA For Beginner's
JPA For Beginner'sJPA For Beginner's
JPA For Beginner's
 
Hibernate complete Training
Hibernate complete TrainingHibernate complete Training
Hibernate complete Training
 
Hibernate working with criteria- Basic Introduction
Hibernate working with criteria- Basic IntroductionHibernate working with criteria- Basic Introduction
Hibernate working with criteria- Basic Introduction
 
Entity Persistence with JPA
Entity Persistence with JPAEntity Persistence with JPA
Entity Persistence with JPA
 
Hibernate inheritance and relational mappings with examples
Hibernate inheritance and relational mappings with examplesHibernate inheritance and relational mappings with examples
Hibernate inheritance and relational mappings with examples
 
Introduction to JPA (JPA version 2.0)
Introduction to JPA (JPA version 2.0)Introduction to JPA (JPA version 2.0)
Introduction to JPA (JPA version 2.0)
 
JPA and Hibernate
JPA and HibernateJPA and Hibernate
JPA and Hibernate
 
Java persistence api 2.1
Java persistence api 2.1Java persistence api 2.1
Java persistence api 2.1
 
Hibernate in Action
Hibernate in ActionHibernate in Action
Hibernate in Action
 
Hibernate Presentation
Hibernate  PresentationHibernate  Presentation
Hibernate Presentation
 
JPA Best Practices
JPA Best PracticesJPA Best Practices
JPA Best Practices
 
Hibernate Tutorial
Hibernate TutorialHibernate Tutorial
Hibernate Tutorial
 

En vedette

02 Hibernate Introduction
02 Hibernate Introduction02 Hibernate Introduction
02 Hibernate Introduction
Ranjan Kumar
 

En vedette (13)

THE WORLDS NO.1 BLACK MAGIC EXPERT WITH POWERFUL LOVE SPELLS +27631229624
THE WORLDS NO.1 BLACK MAGIC EXPERT WITH POWERFUL LOVE SPELLS  +27631229624 THE WORLDS NO.1 BLACK MAGIC EXPERT WITH POWERFUL LOVE SPELLS  +27631229624
THE WORLDS NO.1 BLACK MAGIC EXPERT WITH POWERFUL LOVE SPELLS +27631229624
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
02 Hibernate Introduction
02 Hibernate Introduction02 Hibernate Introduction
02 Hibernate Introduction
 
Hibernate
HibernateHibernate
Hibernate
 
Hibernate an introduction
Hibernate   an introductionHibernate   an introduction
Hibernate an introduction
 
Introduction to Hibernate Framework
Introduction to Hibernate FrameworkIntroduction to Hibernate Framework
Introduction to Hibernate Framework
 
Introduction To Hibernate
Introduction To HibernateIntroduction To Hibernate
Introduction To Hibernate
 
Hibernate presentation
Hibernate presentationHibernate presentation
Hibernate presentation
 
Introduction to hibernate
Introduction to hibernateIntroduction to hibernate
Introduction to hibernate
 
Hibernate ORM: Tips, Tricks, and Performance Techniques
Hibernate ORM: Tips, Tricks, and Performance TechniquesHibernate ORM: Tips, Tricks, and Performance Techniques
Hibernate ORM: Tips, Tricks, and Performance Techniques
 
Java Hibernate Programming with Architecture Diagram and Example
Java Hibernate Programming with Architecture Diagram and ExampleJava Hibernate Programming with Architecture Diagram and Example
Java Hibernate Programming with Architecture Diagram and Example
 
Hibernate Developer Reference
Hibernate Developer ReferenceHibernate Developer Reference
Hibernate Developer Reference
 
Slideshare ppt
Slideshare pptSlideshare ppt
Slideshare ppt
 

Similaire à Hibernate An Introduction

Patni Hibernate
Patni   HibernatePatni   Hibernate
Patni Hibernate
patinijava
 
Advanced Hibernate V2
Advanced Hibernate V2Advanced Hibernate V2
Advanced Hibernate V2
Haitham Raik
 
Ejb3 Struts Tutorial En
Ejb3 Struts Tutorial EnEjb3 Struts Tutorial En
Ejb3 Struts Tutorial En
Ankur Dongre
 
Ejb3 Struts Tutorial En
Ejb3 Struts Tutorial EnEjb3 Struts Tutorial En
Ejb3 Struts Tutorial En
Ankur Dongre
 
Advanced Hibernate Notes
Advanced Hibernate NotesAdvanced Hibernate Notes
Advanced Hibernate Notes
Kaniska Mandal
 
Hibernate Training Session1
Hibernate Training Session1Hibernate Training Session1
Hibernate Training Session1
Asad Khan
 
DESIGNING A PERSISTENCE FRAMEWORK WITH PATTERNS.ppt
DESIGNING A PERSISTENCE FRAMEWORK WITH PATTERNS.pptDESIGNING A PERSISTENCE FRAMEWORK WITH PATTERNS.ppt
DESIGNING A PERSISTENCE FRAMEWORK WITH PATTERNS.ppt
AntoJoseph36
 

Similaire à Hibernate An Introduction (20)

Patni Hibernate
Patni   HibernatePatni   Hibernate
Patni Hibernate
 
5-Hibernate.ppt
5-Hibernate.ppt5-Hibernate.ppt
5-Hibernate.ppt
 
2014 Pre-MSc-IS-3 Persistence Layer
2014 Pre-MSc-IS-3 Persistence Layer2014 Pre-MSc-IS-3 Persistence Layer
2014 Pre-MSc-IS-3 Persistence Layer
 
Hibernate
HibernateHibernate
Hibernate
 
Advanced Hibernate V2
Advanced Hibernate V2Advanced Hibernate V2
Advanced Hibernate V2
 
Ejb3 Struts Tutorial En
Ejb3 Struts Tutorial EnEjb3 Struts Tutorial En
Ejb3 Struts Tutorial En
 
Ejb3 Struts Tutorial En
Ejb3 Struts Tutorial EnEjb3 Struts Tutorial En
Ejb3 Struts Tutorial En
 
Hibernate 3
Hibernate 3Hibernate 3
Hibernate 3
 
Advanced Hibernate Notes
Advanced Hibernate NotesAdvanced Hibernate Notes
Advanced Hibernate Notes
 
Hibernate Training Session1
Hibernate Training Session1Hibernate Training Session1
Hibernate Training Session1
 
Local data storage for mobile apps
Local data storage for mobile appsLocal data storage for mobile apps
Local data storage for mobile apps
 
Hibernate
HibernateHibernate
Hibernate
 
Real World MVC
Real World MVCReal World MVC
Real World MVC
 
DESIGNING A PERSISTENCE FRAMEWORK WITH PATTERNS.ppt
DESIGNING A PERSISTENCE FRAMEWORK WITH PATTERNS.pptDESIGNING A PERSISTENCE FRAMEWORK WITH PATTERNS.ppt
DESIGNING A PERSISTENCE FRAMEWORK WITH PATTERNS.ppt
 
Basic Hibernate Final
Basic Hibernate FinalBasic Hibernate Final
Basic Hibernate Final
 
Java Web Programming on Google Cloud Platform [2/3] : Datastore
Java Web Programming on Google Cloud Platform [2/3] : DatastoreJava Web Programming on Google Cloud Platform [2/3] : Datastore
Java Web Programming on Google Cloud Platform [2/3] : Datastore
 
04 Data Access
04 Data Access04 Data Access
04 Data Access
 
NET Systems Programming Learned the Hard Way.pptx
NET Systems Programming Learned the Hard Way.pptxNET Systems Programming Learned the Hard Way.pptx
NET Systems Programming Learned the Hard Way.pptx
 
Introduction to Datastore
Introduction to DatastoreIntroduction to Datastore
Introduction to Datastore
 
Zend framework 03 - singleton factory data mapper caching logging
Zend framework 03 - singleton factory data mapper caching loggingZend framework 03 - singleton factory data mapper caching logging
Zend framework 03 - singleton factory data mapper caching logging
 

Dernier

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Dernier (20)

A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 

Hibernate An Introduction