Chengyu Sun California State University, Los Angeles

Slides:



Advertisements
Similar presentations
SQL Lecture 10 Inst: Haya Sammaneh. Example Instance of Students Relation  Cardinality = 3, degree = 5, all rows distinct.
Advertisements

CSE 190: Internet E-Commerce Lecture 10: Data Tier.
Table design screen Field name Data type Field size Other properties.
©Silberschatz, Korth and Sudarshan2.1Database System Concepts Chapter 2: Entity-Relationship Model Entity Sets Relationship Sets Design Issues Mapping.
The Java Persistence API Edel Sherratt. Contents Revisit applications programming Using Java Persistence API.
CSE446 S OFTWARE Q UALITY M ANAGEMENT Spring 2014 Yazılım ve Uyguluma Geliştirme Yöneticisi Orhan Başar Evren.
Page 1 ISMT E-120 Desktop Applications for Managers Introduction to Microsoft Access.
ACCESS CHAPTER 1. OBJECTIVES Tables Queries Forms Reports Primary and Foreign Keys Relationship.
Database System Concepts, 5th Ed. Chapter 6: Entity-Relationship Model.
JPA Java Persistence API. Introduction The Java Persistence API provides an object/relational mapping facility for managing relational data in Java applications.
RELATIONSHIPS Generally there are two main database types: flat-file and relational.
MIS 301 Information Systems in Organizations Dave Salisbury ( )
Chapter 4 Introduction to MySQL. MySQL “the world’s most popular open-source database application” “commonly used with PHP”
Fundamentals of Relational Database Operations
Optimize Your Object Model Paul Dayan – Sales Engineer.
Chapter 3: Relational Model  Structure of Relational Databases  Normal forms (chap. 7)  Reduction of an E-R Schema to Relational (Sect. 2.9)  Relational.
1.NET Web Forms Business Forms © 2002 by Jerry Post.
OK lets start, who am I ?. Nayden Gochev (a.k.a. JOKe) Java Spring Android Hybris GWT EJB JSF RMI JAX-RS Struts JMS JPA Hibernate C# ASP.NET TestStudio.
EJB 3.0 Persistence Based on: Patel, Brose, Silverman, Mastering Enterprise JavaBeans 3.0.
Microsoft Access Intro Class 6 Relationships.
1 Database & DBMS The data that goes into transaction processing systems (TPS), also goes to a database to be stored and processed later by decision support.
Burapha University, 2003 Object-Oriented Analysis Basic of Object Mapping to Relational Database.
Topic : Hibernate 3:Advanced ORM Kaster Nurmukan.
Chapter 5 The Relational Data Model By Yue Lu CS157B Spring 2008 Instructor: Dr.Lee.
MIS 301 Information Systems in Organizations Dave Salisbury ( )
Copyright © 2013 by The McGraw-Hill Companies, Inc. All rights reserved. McGraw-Hill/Irwin APPENDIX C DESIGNING DATABASES APPENDIX C DESIGNING DATABASES.
1 ER Modeling BUAD/American University Mapping ER modeling to Relationships.
Java Persistence API (JPA) Relationships. Kinds of relationships UML associations and aggregations (ER non- identifying relationships, shared semantics)
Mapping Objects ↔Relational DB. The Problem with Databases Databases store data in rows in tables, which are not like objects. We can simulate object.
FEN Mapping from Class Diagram (Domain Model) to Relational Model Table Design.
JPA in Vaadin CSCI 3130 Winter What is JPA?  Java Persistence API  Allows for “easy” storage of Java Objects  Is a type of Object Relational.
©Silberschatz, Korth and Sudarshan2.1Database System Concepts Chapter 2: Entity-Relationship Model Entity Sets Relationship Sets Mapping Constraints Keys.
Data Modeling AND ER MODELS.
CS422 Principles of Database Systems Object-Relational Mapping (ORM) Chengyu Sun California State University, Los Angeles.
CS520 Web Programming Object-Relational Mapping with Hibernate and JPA Chengyu Sun California State University, Los Angeles.
CS520 Web Programming Object-Relational Mapping with Hibernate and JPA (I) Chengyu Sun California State University, Los Angeles.
CS320 Web and Internet Programming SQL and MySQL Chengyu Sun California State University, Los Angeles.
CS422 Principles of Database Systems Convert ER Design to Relations Chengyu Sun California State University, Los Angeles.
CS422 Principles of Database Systems Entity-Relationship Model Chengyu Sun California State University, Los Angeles.
Hibernate Annotation 李日貴 (jini) jakarta99 AT gmail.com SoftLeader Tech. Corp. Taiwan Java Annotation Lesson 1.
CS422 Principles of Database Systems Object-Oriented Features in DBMS Chengyu Sun California State University, Los Angeles.
XP Chapter 1 Succeeding in Business with Microsoft Office Access 2003: A Problem-Solving Approach 1 Level 2 Objectives: Understanding and Creating Table.
SchemaLogic Workshop Tools for Enterprise Metadata Management and Synchronization Prepared for the University of Washington Information School Applied.
CS520 Web Programming Spring – Web MVC Chengyu Sun California State University, Los Angeles.
Object-Relational Mapping. Contents  Default Mapping Rules  Elementary Mapping  Embeddables  Relationship Mapping  Inheritance Mapping.
CS520 Web Programming Object-Relational Mapping with Hibernate and JPA Chengyu Sun California State University, Los Angeles.
CS422 Principles of Database Systems Entity-Relationship Model
CS6320 – Java Persistence API
Chengyu Sun California State University, Los Angeles
CS320 Web and Internet Programming SQL and MySQL
Databases Chapter 16.
Advanced Java Programming
CS 174: Server-Side Web Programming February 12 Class Meeting
Database Applications (15-415) ORM - Part I Lecture 11, February 11, 2018 Mohammad Hammoud.
Insert, Update, Delete Manipulating Data.
LECTURE 34: Database Introduction
CS2011 Introduction to Programming I Objects and Classes
JPA: Mapping to an existing database
Chengyu Sun California State University, Los Angeles
CS3220 Web and Internet Programming SQL and MySQL
Chengyu Sun California State University, Los Angeles
Chapter 4 Introduction to MySQL.
CS4961 Software Design Laboratory Understand Aquila Backend
Chengyu Sun California State University, Los Angeles
CS3220 Web and Internet Programming SQL and MySQL
Chengyu Sun California State University, Los Angeles
LECTURE 33: Database Introduction
CS3220 Web and Internet Programming About Data Models
Entity-Relationship Modelling
Chengyu Sun California State University, Los Angeles
Presentation transcript:

Chengyu Sun California State University, Los Angeles CS520 Web Programming Object-Relational Mapping with Hibernate and JPA (II) Chengyu Sun California State University, Los Angeles

SchemaExport Part of the Hibernate Core library Generate DDL from Java classes and annotations In Hibernate Examples, run Hbm2ddl <output_file>

Basic Object-Relational Mapping Class-level annotations @Entity and @Table Id field @Id and @GeneratedValue Fields of simple types @Basic (can be omitted) and @Column Fields of class types @ManyToOne, @OneToMany, @ManyToMany, and @OneToOne

Advanced ORM Embedded class Collection Inheritance

Embedded Class public class Address { String street; String city; String state; String zip; } public class User { Integer id; String username String password; Address address; } users id … street city state zip

Mapping Embedded Class @Embeddable public class Address { String street; String city; String state; String zip; } @Entity public class User { @Id Integer id; String username String password; @Embedded Address address; }

Collection of Simple Types public class Customer { Integer id; String name; String address; Set<String> phones; }

Mapping Element Collection Set<String> phones; customers Customer_phones id Customer_id phones

Customize Collection Table @ElementCollection @CollectionTable( name = “customer_phones”, joinColumns=@JoinColumn(name = “customer_id”) ) @Column(name=“phone”) Set<String> phones;

From Set to List … Elements in a list are ordered Rows in a relational table are not ordered public class Customer { Integer id; String name; String address; List<String> phones; }

… From Set to List Use the natural order (e.g. alphabetic order) of an existing column Use an additional column to keep the order customer_id phone customer_id phone phone_order 1 (323) 343-6789 1 (323) 343-6789 2 1 (626) 353-4567 1 (626) 353-4567 1 1 (323) 343-1234 1 (323) 343-1234 2 (323) 343-1111 2 (323) 343-1111 2 (626) 353-2222 2 (626) 353-2222 1 Customer 1’s list of phones: Customer 1’s list of phones: (323) 343-1234 (323) 343-6789 (626) 353-4567 (323) 343-1234 (626) 353-4567 (323) 343-6789

List of Simple Types Order by property Order by a separate column @OrderBy(“<property_name> ASC|DESC”) Simple types do not have properties @ElementCollection @OrderBy(“asc”) List<String> phones; Order by a separate column @ElementCollection @OrderColumn(name = “phone_order”) List<String> phones;

Issues Related to Collections of Object Types Relationships (a.k.a. associations) Unidirectional vs. Bidirectional Cascading behaviors

Types of Relationships Many-to-Many Many-to-One / One-to-Many One-to-One

Many-to-Many Relationship Each entity in E1 can be related to many entities in E2 Each entity in E2 can be related to many entities in E1 E1 E2

Many-to-One Relationship Each entity in E1 can be related to one entities in E2 Each entity in E2 can be related to many entities in E1 E1 E2

One-to-One Relationship Each entity in E1 can be related to one entities in E2 Each entity in E2 can be related to one entities in E1 E1 E2

Relationship Type Examples Books and authors?? Books and editors??

Many-To-One/One-To-Many Example A customer may own multiple accounts An account only has one owner

Bidirectional Association – OO Design #1 public class Account { Integer id; Double balance; Date createdOn; Customer owner; } public class Customer { Integer id; String name; String address; Set<String> phones; Set<Account> accounts; }

Unidirectional Association – OO Design #2 public class Account { Integer id; Double balance; Date createdOn; } public class Customer { Integer id; String name; String address; Set<String> phones; Set<Account> accounts; }

Unidirectional Association – OO Design #3 public class Account { Integer id; Double balance; Date createdOn; Customer owner; } public class Customer { Integer id; String name; String address; Set<String> phones; }

Unidirectional vs. Bidirectional Do the three OO designs result in different database schemas?? Does it make any difference on the application side?? Which one should we use??

… And the Answers Are No, they all map to the same schema Yes, bidirectional association is more convenient Almost always bidirectional association, except for indexed collections (i.e. lists with order columns) See Section 2.4.6.2.1 in Hibernate Annotation Reference Guide See AnswerSheet and AnswerSection in CSNS2

Mapping Bidirectional One-To-Many public class Account { Integer id; Double balance; Date createdOn; @ManyToOne Customer owner; } public class Customer { Integer id; String name; String address; Set<String> phones; @OneToMany(mappedBy=“owner”) Set<Account> accounts; } property

Using List public class Customer { Integer id; String name; String address; Set<String> phones; @OneToMany(mappedBy=“owner”) @OrderBy( “createdOn asc” ) List<Account> accounts; }

Many-To-Many Example A customer may own multiple accounts An account may have multiple owners

Mapping Many-To-Many public class Account { Integer id; Double balance; Date createdOn; @ManyToMany Set<Customer> owners; } public class Customer { Integer id; String name; String address; Set<String> phones; @ManyToMany(mappedBy=“owners”) Set<Account> accounts; } property

Customize Join Table @ManyToMany @JoinTable( name = “account_owners”, joinColumns=@JoinColumn(name = “account_id”), inverseJoinColumns=@JoinColumn(name=“owner_id”) ) Set<Customer> owners;

Cascading Behavior Whether an operation on the parent object (e.g. Customer) should be applied to the children objects in a collection (e.g. List<Account>) Customer c = new Customer(“cysun”); Account a1 = new Account(); Account a2 = new Account(); c.getAccounts().add( a1 ); c.getAccounts().add( a2 ); entityManager.persist(c); // will a1 and a2 be saved as well? … … entityManager.remove(c); // will a1 and a2 be deleted from db??

Cascading Types in JPA http://sun.calstatela.edu/~cysun/documentation/jpa-2.0-api/javax/persistence/CascadeType.html

CascadeType Examples @OneToMany(mappedBy=“owner”, cascade=CascadeType.PERSIST) List<Account> accounts; @OneToMany(mappedBy=“owner”, cascade={CascadeType.PERSIST, CascadeType.MERGE}) List<Account> accounts; @OneToMany(mappedBy=“owner”, cascade=CascadeType.ALL) List<Account> accounts;

Inheritance public class CDAccount extends Account { Integer term; }

Everything in One Table accounts id account_type balance created_on term Discriminator column

Inheritance Type – SINGLE_TABLE @Entity @Table(name=“accounts”) @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name=“account_type”) @DiscriminatorValue(“CHECKING”) public class Account { … } @Entity @DiscrimnatorValue(“CD”) public class CDAccount extends Account { … }

Table Per Subclass accounts cd_accounts id balance created_on foreign key cd_accounts account_id term

Inheritance Type – JOINED @Entity @Table(name=“accounts”) @Inheritance(strategy=InheritanceType.JOINED) public class Account { … } @Entity @Table(name=“cd_accounts”) public class CDAccount { … }

Table Per Concrete Class accounts id balance created_on cd_accounts id balance created_on term

Inheritance Type – TABLE_PER_CLASS @Entity @Table(name=“accounts”) @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) public class Account { … } @Entity @Table(name=“cd_accounts”) public class CDAccount { … }

Choosing Inheritance Types Consider the following queries List the information of all accounts (i.e. both checking and CD) List the information of CD accounts

Tips for O/R Mapping Understand relational design Understand OO design Know what the database schema should looks like before doing the mapping Understand OO design Make sure the application design is object-oriented

Further Readings TopLink JPA Annotation Reference – http://www.oracle.com/technetwork/middleware/ias/toplink-jpa-annotations-096251.html Pro JPA 2 by Mike Keith and Merrick Schincariol