Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package DAO; import Entities.Car; import Entities.Fixing; import Utils.HibernateUtil; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.persistence.NoResultException; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.query.Query; /** * * @author Marwen */ public class FixingDAO implements FixingDAOInterface { Session session; Transaction transaction; public FixingDAO() { session = HibernateUtil.getSessionFactory().getCurrentSession(); try { transaction.isActive(); } catch (Exception e) { transaction = session.beginTransaction(); } } @Override public void addOrUpdateFixing(Fixing f) { session = HibernateUtil.getSessionFactory().getCurrentSession(); transaction = session.getTransaction(); session.saveOrUpdate(f); transaction.commit(); session.close(); System.out.println("Successfully inserted"); } @Override public List<Fixing> findFixingByYear(Integer year) { session = HibernateUtil.getSessionFactory().getCurrentSession(); transaction = session.getTransaction(); String hql = "FROM Fixing WHERE YEAR (fixingDate) = :year "; Query query = session.createQuery(hql); query.setInteger("year", year); List<Fixing> fixings = query.getResultList(); session.close(); return fixings; } @Override public List<Fixing> findFixingsByImmatriculation(String immatriculation) { // new DAO with get previous session (false) CarDAO carDao = new CarDAO(false); // get car by immatriculation Car car = carDao.getCarByImmatriculation(immatriculation); System.out.println("Car found " + car.getImmatriculation()); // reopen the session (because CarDAO has closed it) session = HibernateUtil.getSessionFactory().getCurrentSession(); transaction = session.beginTransaction(); String hql = "FROM Fixing WHERE car = :car "; Query query = session.createQuery(hql); query.setEntity("car", car); List<Fixing> fixings = query.getResultList(); session.close(); return fixings; } @Override public List<Fixing> findFixingsByDepartement(String departementName) { session = HibernateUtil.getSessionFactory().getCurrentSession(); transaction = session.getTransaction(); // new DAO with get previous session (false) CarDAO carDao = new CarDAO(false); // get cars by departement List<Car> cars = carDao.getCarByDepartement(departementName); List<Fixing> fixings = new ArrayList<>(); // reopen the session (because CarDAO has closed it) session = HibernateUtil.getSessionFactory().getCurrentSession(); transaction = session.beginTransaction(); // for each car in that departement , we will get all its fixings for (Car car : cars) { String hql = "FROM Fixing WHERE car = :car "; Query query = session.createQuery(hql); query.setEntity("car", car); try { fixings.addAll(query.getResultList()); } catch (NullPointerException e) { /// this car does not have any Fixings } } session.close(); return fixings; } @Override public List<Fixing> findFixingsByDate(Date date) { session = HibernateUtil.getSessionFactory().getCurrentSession(); transaction = session.getTransaction(); String hql = "FROM Fixing WHERE fixingDate = :date "; Query query = session.createQuery(hql); query.setDate("date", date); List<Fixing> fixings = query.getResultList(); session.close(); return fixings; } @Override public Fixing findFixingBySoucheNumer(String soucheNum) { session = HibernateUtil.getSessionFactory().getCurrentSession(); transaction = session.getTransaction(); Fixing fixing = session.get(Fixing.class, soucheNum); session.close(); return fixing; } @Override public List<Fixing> findAllFixingAlerts() { session = HibernateUtil.getSessionFactory().getCurrentSession(); transaction = session.getTransaction(); List<Fixing> fixings = new ArrayList<>(); try { String hql = "FROM Fixing WHERE indexKM+9500 < indexKM OR dateProchaineTaxe < CURRENT_DATE()+10 OR dateProchaineVigniette < CURRENT_DATE()+10"; Query query = session.createQuery(hql); fixings.addAll(query.getResultList()); } catch (NoResultException e) { session.close(); return null; } session.close(); return fixings; } @Override public List<Car> findCoutKilometrique() { session = HibernateUtil.getSessionFactory().getCurrentSession(); transaction = session.getTransaction(); List<Car> cars = new ArrayList<>(); try { String hql = "FROM Car AS c WHERE (prixAchat*0.4 < (SELECT SUM(f.price) FROM Fixing AS f WHERE car.immatriculation= c.immatriculation)) OR indexKm>indexKm+9500"; Query query = session.createQuery(hql); cars.addAll(query.getResultList()); } catch (NoResultException e) { session.close(); return null; } session.close(); return cars; } }