3. Java Persistence API. 4. Entity Relationships презентация

Содержание

Basics A foreign key can be one or more columns that reference a unique key, usually the primary key, in another table A foreign key and the primary parent key it

Слайд 13. Java Persistence API
4. Entity Relationships


Слайд 2Basics
A foreign key can be one or more columns that reference

a unique key, usually the primary key, in another table
A foreign key and the primary parent key it references must have the same number and type of fields
Foreign keys represents relationships from a column or columns in one table to a column or columns in another table

*

Victor Mozharsky


Слайд 3Multiplicity in Entity Relationships
Multiplicities are of the following types:
Many-to-one: Multiple instances

of an entity can be related to a single instance of the other entity
One-to-one: Each entity instance is related to a single instance of another entity
One-to-many: An entity instance can be related to multiple instances of the other entities
Many-to-many: The entity instances can be related to multiple instances of each other.


*

Victor Mozharsky


Слайд 4CM Database Schema
*
Victor Mozharsky


Слайд 5Many-to-One Mappings
A many-to-one mapping is defined by annotating the attribute in

the source entity (the attribute that refers to the target entity) with the @ManyToOne annotation
A @JoinColumn(name=Fkname) annotation discribes a foreing key of a relationship

*

Victor Mozharsky


Слайд 6Exercise: Read a Payment
Create a project for read payment data by

payment id with a merchant name instead of merchant id

*

Victor Mozharsky


Слайд 7CM Database Schema
*
Victor Mozharsky


Слайд 8Payment Entity (1 of 2)
@Entity
public class Payment {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private

double charge;
private double total;
private String goods;
private java.sql.Date dt;
@ManyToOne
@JoinColumn(name="merchantId")
private Merchant merchant;

*

Victor Mozharsky


Слайд 9Payment Entity (2 of 2)
public Merchant getMerchant(){ return merchant; }
public void

setMerchant(Merchant value){
merchant = value;
}
. . . . . . . . . . . . . . . .
public String getStringForPrint() {
String txt = "id = " + id + "; date = ";
SimpleDateFormat dtFrm = new SimpleDateFormat("dd.MM.yyyy");
txt += dtFrm.format(dt) + "; merchant = " + merchant.getName();
txt += "; total = " + total + "; charge = " + charge;
return txt;
}

*

Victor Mozharsky


Слайд 10DAO & Service Interfaces
public interface PaymentDao {
public List findByMerchantId(int id);
public double

getPaymentSum();
public Payment findById(int id);
}

public interface PaymentService {
public List findByMerchantId(int id);
public double getPaymentSum();
public Payment findById(int id);
}

*

Victor Mozharsky


Слайд 11PaymentDaoImpl Class
public Payment findById(int id){
return em.find(Payment.class, id);
}
*
Victor Mozharsky


Слайд 12Main Class
@SuppressWarnings("resource")
public static void main(String[] args) {
ApplicationContext context

= new ClassPathXmlApplicationContext("beans.xml");
PaymentService paymentService = context.getBean(PaymentService.class);
Payment p = paymentService.findById(2);
System.out.println(p.toString());
}

*

Victor Mozharsky


Слайд 13Exercise: Read a Payment
See P351ReadPayment project for the full text
*
Victor Mozharsky


Слайд 14Exercise: Group Payments
Modify P237Grouping project using entities from the previous project
*
Victor

Mozharsky

Слайд 15PaymentDaoImp Class
public List getTotalReport(){
String txt = "SELECT new com.bionic.edu.Result


(p.merchant.name, count(p), SUM(p.chargePayed))";
txt += "FROM Payment p GROUP BY p.merchant.name";
TypedQuery query = em.createQuery(txt, Result.class);
return query.getResultList();
}

*

Victor Mozharsky


Слайд 16Main Class
@SuppressWarnings("resource")
public static void main(String[] args) {
ApplicationContext context

= new ClassPathXmlApplicationContext("beans.xml");
PaymentService paymentService = context.getBean(PaymentService.class);
List list = paymentService.getTotalReport();
for(Result r: list)
System.out.format("%1$25s %2$3d %3$8.2f \n", r.getName(), r.getCount(), r.getSum());
}

*

Victor Mozharsky


Слайд 17Exercise: Group Payments
See P352GroupPayment project for the full text
*
Victor Mozharsky


Слайд 18One-to-Many Mappings
An entity instance can be related to multiple instances of

the other entities
One-to-many relationships use the @OneToMany annotation on the corresponding persistent property or field
The mappedBy element is needed to refer to the attribute annotated by ManyToOne in the corresponding entity:
@OneToMany(mappedBy=“attribute”)
A one-to-many association needs to map the collection of entities

*

Victor Mozharsky


Слайд 19Exercise: Read a Merchant’s Payments
Create a project for read payment data

that correspond to a merchant given by its id

*

Victor Mozharsky


Слайд 20CM Database Schema
*
Victor Mozharsky


Слайд 21Merchant Entity
@Entity
public class Merchant {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
private double

charge;
private int period;
private double total;
@OneToMany(mappedBy="merchant")
private Collection payments;

*

Victor Mozharsky


Слайд 22Main Class (1 of 2)
@SuppressWarnings("resource")
public static void main(String[] args) {

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
MerchantService merchantService = context.getBean(MerchantService.class);
List list = merchantService.getSortedByNeedToPay();
for(Merchant m: list){
System.out.println("=======================");
System.out.println(m.getName());

*

Victor Mozharsky


Слайд 23Main Class (2 of 2)
System.out.println(" ");
Collection payments = m.getPayments();
for (Payment p

: payments) {
System.out.println(p.toString());
}
}
}

*

Victor Mozharsky


Слайд 24Exercise: Read a Merchant’s Payments
See P353MerchantPayments project for the full text

*
Victor

Mozharsky

Слайд 25Many-to-Many Mappings
The entity instances can be related to multiple instances of

each other
Many-to-many relationships use the @ManyToMany annotation on the corresponding persistent property or field
We must use a third table to associate the two entity types (join table)

*

Victor Mozharsky


Слайд 26@JoinTable Annotation
@JoinTable(name=“table name”,
joinColumns=@JoinColumn(name=“c1Id”),
inverseJoinColumns=
@JoinColumn(name=“c2Id”))
*
Victor Mozharsky


Слайд 27Exercise: Read Customer’s Merchants
Create a project to read data about merchants

whose goods were bought by a given customer

*

Victor Mozharsky


Слайд 28Customer Entity (1 of 2)
@Entity
public class Customer {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private

java.sql.Date maturity;
private String ccType;
private String ccNo;
private String eMail;
private String address;
private String name;

*

Victor Mozharsky


Слайд 29Customer Entity (2 of 2)
@ManyToMany
@JoinTable(name="Payment", joinColumns=@JoinColumn(name="customerId"),
inverseJoinColumns=@JoinColumn(name="merchantId"))
private Collection merchants;
*
Victor Mozharsky


Слайд 30Main Class
@SuppressWarnings("resource")
public static void main(String[] args) {
ApplicationContext context

= new ClassPathXmlApplicationContext("beans.xml");
CustomerService customerService = context.getBean(CustomerService.class);
Customer customer = customerService.findById(1);
if (customer != null){
System.out.println(customer.toString());
Collection merchants = customer.getMerchants();
for (Merchant m : merchants) { System.out.println(m.getName());}}}

*

Victor Mozharsky


Слайд 31Exercise: Read Customer’s Merchants
See P354CustAndMerch project for the full text
*
Victor Mozharsky


Слайд 32Lazy Relationships
The fetch mode can be specified on any of the

four relationship mapping types:
@ManyToOne(fetch=FetchType.LAZY)
Lazy loading can essential enhance performance

*

Victor Mozharsky


Слайд 33One-to-One Mappings
Each entity instance is related to a single instance of

another entity
One-to-one relationships use the @OneToOne annotation on the corresponding persistent property or field
Example of One-To-One mapping: Employee and ParkingSpace entities

*

Victor Mozharsky


Слайд 34Embedded Objects (1 of 2)
An embedded object is one that is

dependent on an entity for its identity
It has no identity of its own, but is merely part of the entity state
The state of the embedded object is stored with the rest of the entity state in the database row, with no distinction between the state in the Java entity and that in its embedded object

*

Victor Mozharsky


Слайд 35Embedded Objects (2 of 2)
We can share the same embedded object

type with other entities that also have the same internal representation
Example: the home address of the employee (contains Street, City, State, ZipCode fields)

*

Victor Mozharsky


Слайд 36Embedded Type
An embedded type is marked as such by adding the

@Embeddable annotation to the class definition
Its fields and properties will be persistable as part of an entity
We might also want to define the access type of the embeddable object so it is accessed the same way regardless of which entity it is embedded in

*

Victor Mozharsky


Слайд 37Address Embedded Type
@Embeddable
@Access(AccessType.FIELD)
public class Address {

private String street;
private String city;
private String state;
private String zipCode;
// ...
}

*

Victor Mozharsky


Слайд 38Using an Embedded Object
@Entity
public class Employee {

@Id
private int id;
private String name;
private long salary;
@Embedded
private Address address;
// ...
}

*

Victor Mozharsky


Слайд 39Reuse of Embedded Type
An Address class could be reused in both

Employee and Company entities

*

Victor Mozharsky


Слайд 40Database Schema Generation
Automatically generation the tables and database schema for a

persistence unit can be done through the "eclipselink.ddl-generation" persistence unit property
The tables and constraints will be generated for all of the classes defined in that persistence unit.

*

Victor Mozharsky


Слайд 41eclipselink.ddl-generation Values
create-tables – if the table already exists then it will

not be dropped or replaced, the existing table will be used
drop-and-create-tables - will first drop the existing table, and then create the new table. Note that this will lose all of the data in the tables when they are dropped!!

*

Victor Mozharsky


Слайд 42Schema Generation Practice
One of the complaints around schema generation is that

you can’t specify everything that you need to be able to finely tune the schema.
There are too many differences between databases and too many different settings to try to put in options for every database type.

*

Victor Mozharsky


Слайд 43Schema Generation Practice
If every database-tuning option were exposed through JPA then

we would end up duplicating the features of Data Definition Language (DDL) in an API
The final schema will typically be tuned by a database administrator or someone with the appropriate level of database experience.

*

Victor Mozharsky


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика