Commit fd0afffc by Patryk Czarnik

Poprawki w przykładach Hibernate

parent 9ab65d84
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SqlDialectMappings">
<file url="file://$PROJECT_DIR$/src/main/java/hr/gotowe/Odczyt14_Native.java" dialect="GenericSQL" />
<file url="PROJECT" dialect="PostgreSQL" />
</component>
</project>
\ No newline at end of file
...@@ -25,6 +25,7 @@ public class Criteria3 { ...@@ -25,6 +25,7 @@ public class Criteria3 {
CriteriaQuery<Employee> cq = cb.createQuery(Employee.class); CriteriaQuery<Employee> cq = cb.createQuery(Employee.class);
Root<Employee> root = cq.from(Employee.class); Root<Employee> root = cq.from(Employee.class);
cq.select(root); cq.select(root);
// e.salary >= minSalary AND e.department.location.city = szukaneMiasto
cq.where(cb.and(cb.ge(root.get("salary"), minSalary), cq.where(cb.and(cb.ge(root.get("salary"), minSalary),
cb.equal(root.get("department").get("location").get("city"), szukaneMiasto))); cb.equal(root.get("department").get("location").get("city"), szukaneMiasto)));
cq.orderBy(cb.desc(root.get("salary"))); cq.orderBy(cb.desc(root.get("salary")));
......
...@@ -24,7 +24,7 @@ public class Odczyt08_Tablica { ...@@ -24,7 +24,7 @@ public class Odczyt08_Tablica {
} }
System.out.println("\nSprawdzę typy kolumn:"); System.out.println("\nSprawdzę typy kolumn:");
Object[] row = (Object[])rows.get(0); Object[] row = rows.get(0);
System.out.println(row[0].getClass().getSimpleName() + " " + row[2].getClass().getSimpleName() + " " + row[3].getClass().getSimpleName()); System.out.println(row[0].getClass().getSimpleName() + " " + row[2].getClass().getSimpleName() + " " + row[3].getClass().getSimpleName());
} finally { } finally {
if(em != null) em.close(); if(em != null) em.close();
......
...@@ -18,7 +18,8 @@ public class Odczyt11_Join { ...@@ -18,7 +18,8 @@ public class Odczyt11_Join {
em = emf.createEntityManager(); em = emf.createEntityManager();
System.out.println("Odczyt..."); System.out.println("Odczyt...");
TypedQuery<Object[]> query = em.createQuery("SELECT e.firstName, e.lastName, d.departmentName, l.city" TypedQuery<Object[]> query = em.createQuery("SELECT e.firstName, e.lastName, d.departmentName, l.city"
+ " FROM Employee e LEFT JOIN e.department d LEFT JOIN d.location l", Object[].class); + " FROM Employee e LEFT JOIN e.department d LEFT JOIN d.location l"
+ " ORDER BY l.city, e.lastName, e.firstName", Object[].class);
List<Object[]> emps = query.getResultList(); List<Object[]> emps = query.getResultList();
for (Object[] emp : emps) { for (Object[] emp : emps) {
System.out.println(Arrays.toString(emp)); System.out.println(Arrays.toString(emp));
......
...@@ -24,8 +24,7 @@ public class Odczyt13_Native { ...@@ -24,8 +24,7 @@ public class Odczyt13_Native {
List<?> rows = query.getResultList(); List<?> rows = query.getResultList();
for (Object row : rows) { for (Object row : rows) {
// na wszelki wypadek sprawdzam, ale widzę, że Object[] działa // na wszelki wypadek sprawdzam, ale widzę, że Object[] działa
if(row instanceof Object[]) { if(row instanceof Object[] cols) {
Object[] cols = (Object[]) row;
System.out.println(cols[0] + " pracuje jako " + cols[1] + " i zarabia " + cols[2]); System.out.println(cols[0] + " pracuje jako " + cols[1] + " i zarabia " + cols[2]);
} }
} }
......
...@@ -16,7 +16,7 @@ public class Odczyt14_Native { ...@@ -16,7 +16,7 @@ public class Odczyt14_Native {
public static void main(String[] args) { public static void main(String[] args) {
final String sql = """ final String sql = """
SELECT employee_id AS "id", SELECT employee_id AS "id",
department_name AS "departmentName", department_name AS "departmentName",
first_name AS "firstName", first_name AS "firstName",
last_name AS "lastName", last_name AS "lastName",
...@@ -26,10 +26,10 @@ public class Odczyt14_Native { ...@@ -26,10 +26,10 @@ public class Odczyt14_Native {
round(salary - avg(salary) OVER (PARTITION BY department_id), 2) AS "diff", round(salary - avg(salary) OVER (PARTITION BY department_id), 2) AS "diff",
rank() OVER (PARTITION BY department_id ORDER BY salary DESC) AS "depPos", rank() OVER (PARTITION BY department_id ORDER BY salary DESC) AS "depPos",
rank() OVER (ORDER BY salary DESC) AS "globalPos" rank() OVER (ORDER BY salary DESC) AS "globalPos"
FROM departments d FROM departments d
INNER JOIN employees e USING(department_id) INNER JOIN employees e USING(department_id)
INNER JOIN jobs j USING(job_id) INNER JOIN jobs j USING(job_id)
ORDER BY 7 DESC, 2, 6 DESC, 4 ASC, 3 ASC ORDER BY 7 DESC, 2, 6 DESC, 4 ASC, 3 ASC
"""; """;
System.out.println(sql); System.out.println(sql);
......
...@@ -28,12 +28,12 @@ public class OdczytajManagerow { ...@@ -28,12 +28,12 @@ public class OdczytajManagerow {
System.out.println("nie znaleziono takiego pracownika"); System.out.println("nie znaleziono takiego pracownika");
continue; continue;
} }
while(emp != null) { while(emp.getManager() != null) {
System.out.println(" " + emp.getId() + " " + emp.getFirstName() + " " + emp.getLastName()
+ "(" + emp.getJob().getJobTitle() + ")" + " $" + emp.getSalary());
emp = em.find(Employee.class, emp.getManager()); emp = em.find(Employee.class, emp.getManager());
System.out.println("Managerem jest:"); System.out.println("Managerem jest:");
System.out.println(" " + emp.getId() + " " + emp.getFirstName() + " " + emp.getLastName()
+ " (" + emp.getJob().getJobTitle() + ") $" + emp.getSalary());
} }
} }
} finally { } finally {
......
...@@ -22,6 +22,7 @@ public class P9_DetachMerge { ...@@ -22,6 +22,7 @@ public class P9_DetachMerge {
System.out.println("Zmieniam pole"); System.out.println("Zmieniam pole");
lokalizacja.setCity("WENECJA"); lokalizacja.setCity("WENECJA");
System.out.println(lokalizacja); System.out.println(lokalizacja);
// gdybym teraz zrobił commit, to ta zmiana nie zapisze się w bazie
System.out.println("Ponowny find"); System.out.println("Ponowny find");
Location lokalizacjaFind = em.find(Location.class, 1100); Location lokalizacjaFind = em.find(Location.class, 1100);
...@@ -29,10 +30,18 @@ public class P9_DetachMerge { ...@@ -29,10 +30,18 @@ public class P9_DetachMerge {
System.out.println("merge"); System.out.println("merge");
Location lokalizacjaMerge = em.merge(lokalizacja); Location lokalizacjaMerge = em.merge(lokalizacja);
// obiekt lokalizacja nie zmienił położenia w pamięci i jest oddzielnym obiektem.
// uwaga! dalsze zmiany na nim nie wpływają na obiekty JPA
lokalizacja.setStreetAddress("ULICA WIELKA NOWA");
// To wynik operacji merge jest tym obiekty należącym do puli; tutaj jest on równy lokalizacjaFind
System.out.println("l : " + lokalizacja); System.out.println("l : " + lokalizacja);
System.out.println("lf: " + lokalizacjaFind); System.out.println("lf: " + lokalizacjaFind);
System.out.println("lm: " + lokalizacjaMerge); System.out.println("lm: " + lokalizacjaMerge);
System.out.println(lokalizacja == lokalizacjaFind); // false
System.out.println(lokalizacjaMerge == lokalizacjaFind); // true
em.getTransaction().rollback(); em.getTransaction().rollback();
System.out.println("Zrolowano."); System.out.println("Zrolowano.");
} }
......
...@@ -27,6 +27,8 @@ public class P9_Merge { ...@@ -27,6 +27,8 @@ public class P9_Merge {
System.out.println(lokalizacjaFind); System.out.println(lokalizacjaFind);
System.out.println("merge"); System.out.println("merge");
// gdyby nie było id - zrobiłby inserta
// jeśli jest id - to robi updejta
Location lokalizacjaMerge = em.merge(loc); Location lokalizacjaMerge = em.merge(loc);
System.out.println("l : " + loc); System.out.println("l : " + loc);
System.out.println("lf: " + lokalizacjaFind); System.out.println("lf: " + lokalizacjaFind);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment