Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Association table mapping Jakub Chalupa Naim Ashhab ČVUT FEL A7B36ASS – Architektura SW systémů LS 2014.

Podobné prezentace


Prezentace na téma: "Association table mapping Jakub Chalupa Naim Ashhab ČVUT FEL A7B36ASS – Architektura SW systémů LS 2014."— Transkript prezentace:

1 Association table mapping Jakub Chalupa Naim Ashhab ČVUT FEL A7B36ASS – Architektura SW systémů LS 2014

2 Association table mapping – úvod Problém  objekty jsou mezi sebou provázány referencemi  každý objekt udržuje kolekci referencí na jiné objekty Příklad: zaměstnanci a jejich zkušenosti  každý zaměstnanec má více zkušeností  každá zkušenost může být připárována k více zaměstnancům Jak na to?  v relační databázi vytvoříme asociační tabulku, která nám zaznamená jednotlivé reference mezi entitami

3 Association table mapping – schéma Transformace relací mezi objekty do relační databáze  zaměstnanec vlastní kolekci zkušeností  zkušenost vlastní kolekci zaměstnanců, které tuto zkušenost mají  každá jednotlivá vazba bude reprezentována řádkem v asociační tabulce

4 Association table mapping - implementace Zaměstnanci a zkušenosti  zaměstnanec má kolekci zkušeností, zkušenost má kolekci zaměstnanců class Employee... { private List skills; public List getSkills() { return skills; } public void setSkills(List skill) { this.skills= skills; } public void addSkill(Skill skill) { if(!skills.contains(skill)) { skills.add(skill); } public void removeSkill(Skill skill) { skills.remove(skill); } class Skill... { private List employees; public List getEmployees() { return employees; } public void setEmployees(List employees) { this.employees = employees; } public void addEmployee(Employee employee) { if(!employees.contains(employee)) { employees.add(employee); } public void removeEmployee(Employee employee) { employees.remove(employee); }

5 Association table mapping – spojovací tabulka  kdo managuje spojovací tabulku? class EmployeeMapper... { private List loadSkills(Employee emp) { List skills = new ArrayList (); for(DataRow row : skillLinkTable.getRows("employeeId = ?", emp.id)) { skills.add(Skill.find("id", row.id)); } return skills; } private void saveSkills(Employee emp) { deleteSkills(emp); for(Skill s : emp.skills) { DataRow row = skillLinkTable.newRow(); row.employeeId = emp.id; row.skillId = s.id; skillLinkTable.addRow(row); } private void deleteSkills(Employee emp) { for(DataRow row : skillLinkTable.getRows("employeeId = ?", emp.id)) { row.delete(); }.... }

6 Association table mapping – zmeny v referencích Problémy  co se stane při změně jedné kolekce?  musíme zajistit update druhé kolekce  např. celým novým načtením z databáze  co se stane při odstranění jedné položky z kolekce?  co se stane při přidání položky do jedné kolekce? Odpověď  rozumná ORM řeší všechny tyto nepříjemnosti na pozadí

7 Association table mapping – pouzití ORM  všude u relací *.. *  JPA (Hibernate): class Employee... { private Set skills;... @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinTable(name = "employee_skills", joinColumns = { @JoinColumn(name = "employee_id", nullable = false, updatable = false)}, @InverseJoinColumns = {@JoinColumn(name = "skill_id", nullable = false, updatable = false)} ) public Set getSkills() { return skills; }... class Skill... { private Set employees;... @ManyToMany(fetch = FetchType.LAZY, mappedBy = "skills") public Set getEmployees() { return employees; }...

8 Association table mapping – shrnutí Výhody  převedení n..n relace mezi objekty do relační databáze Nevýhody  složitá údržba spojovací tabulky a jednotlivých kolekcí  při změně jedné kolekce nutnost změny druhé kolekce Související vzory  dependent mapping

9 Zdroje Martin Fowler - Catalog of Patterns of Enterprise Application Architecture (http://martinfowler.com/eaaCatalog/) Jimmy Nilsson – Applying domain-driven design and patterns: with examples in C# and.NET http://www.mkyong.com/hibernate/hibernate-many-to-many-relationship-example-annotation/


Stáhnout ppt "Association table mapping Jakub Chalupa Naim Ashhab ČVUT FEL A7B36ASS – Architektura SW systémů LS 2014."

Podobné prezentace


Reklamy Google