From e93316fe5c39a7621457ffdfb42b4455dfaa2b9c Mon Sep 17 00:00:00 2001 From: Ivan Romanov Date: Thu, 20 Apr 2017 19:34:41 +0200 Subject: [PATCH] HW4 is not complited --- .../ru/javawebinar/topjava/model/Meal.java | 24 +++++++++++- .../ru/javawebinar/topjava/model/User.java | 7 ++-- .../topjava/repository/MealRepository.java | 2 +- .../repository/jpa/JpaMealRepositoryImpl.java | 37 +++++++++++++++++-- src/main/resources/spring/spring-db.xml | 22 +++++------ 5 files changed, 71 insertions(+), 21 deletions(-) diff --git a/src/main/java/ru/javawebinar/topjava/model/Meal.java b/src/main/java/ru/javawebinar/topjava/model/Meal.java index 6e3c3b7..b4c230f 100644 --- a/src/main/java/ru/javawebinar/topjava/model/Meal.java +++ b/src/main/java/ru/javawebinar/topjava/model/Meal.java @@ -1,7 +1,8 @@ package ru.javawebinar.topjava.model; -import javax.persistence.FetchType; -import javax.persistence.ManyToOne; +import org.hibernate.validator.constraints.NotBlank; + +import javax.persistence.*; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @@ -10,14 +11,33 @@ * GKislin * 11.01.2015. */ +@NamedQueries({ + @NamedQuery(name = Meal.GET_ALL, query = "SELECT m FROM Meal m WHERE m.user.id =?1"), + @NamedQuery(name = Meal.GET_BETWEEN, query = "SELECT m FROM Meal m WHERE m.user.id =?1 and m.dateTime >= ?2 and m.dateTime <= ?3 order by m.dateTime desc"), +}) + +@Entity +@Table(name = "meals") public class Meal extends BaseEntity { + + public static final String GET_ALL = "Meal.getAll"; + public static final String GET_BETWEEN = "Meal.getAllSorted"; + + @Column(name = "date_time") + @NotBlank private LocalDateTime dateTime; + @Column(name = "description" , nullable = false) + @NotBlank private String description; + @Column(name = "calories", nullable = false) + @NotBlank private int calories; @ManyToOne(fetch = FetchType.LAZY) + @NotBlank + @JoinColumn(name="user_id", nullable = false) private User user; public Meal() { diff --git a/src/main/java/ru/javawebinar/topjava/model/User.java b/src/main/java/ru/javawebinar/topjava/model/User.java index 4411c59..f245c71 100644 --- a/src/main/java/ru/javawebinar/topjava/model/User.java +++ b/src/main/java/ru/javawebinar/topjava/model/User.java @@ -6,9 +6,7 @@ import org.hibernate.validator.constraints.Range; import javax.persistence.*; -import java.util.Date; -import java.util.EnumSet; -import java.util.Set; +import java.util.*; import static ru.javawebinar.topjava.util.MealsUtil.DEFAULT_CALORIES_PER_DAY; @@ -51,6 +49,9 @@ public class User extends NamedEntity { @Range(min = 10, max = 10000) private int caloriesPerDay = DEFAULT_CALORIES_PER_DAY; + @OneToMany(mappedBy = "user") + private List meals; + public User() { } diff --git a/src/main/java/ru/javawebinar/topjava/repository/MealRepository.java b/src/main/java/ru/javawebinar/topjava/repository/MealRepository.java index 2e5864b..a140040 100644 --- a/src/main/java/ru/javawebinar/topjava/repository/MealRepository.java +++ b/src/main/java/ru/javawebinar/topjava/repository/MealRepository.java @@ -20,7 +20,7 @@ public interface MealRepository { Meal get(int id, int userId); // ORDERED dateTime - List getAll(int userId); + List getAll(int userId); // ORDERED dateTime List getBetween(LocalDateTime startDate, LocalDateTime endDate, int userId); diff --git a/src/main/java/ru/javawebinar/topjava/repository/jpa/JpaMealRepositoryImpl.java b/src/main/java/ru/javawebinar/topjava/repository/jpa/JpaMealRepositoryImpl.java index 052d875..9985fb1 100644 --- a/src/main/java/ru/javawebinar/topjava/repository/jpa/JpaMealRepositoryImpl.java +++ b/src/main/java/ru/javawebinar/topjava/repository/jpa/JpaMealRepositoryImpl.java @@ -1,18 +1,35 @@ package ru.javawebinar.topjava.repository.jpa; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; import ru.javawebinar.topjava.model.Meal; import ru.javawebinar.topjava.repository.MealRepository; +import ru.javawebinar.topjava.util.ValidationUtil; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; import java.time.LocalDateTime; import java.util.List; @Repository +@Transactional(readOnly = true) public class JpaMealRepositoryImpl implements MealRepository { + + + @PersistenceContext + private EntityManager em; + @Override + @Transactional public Meal save(Meal meal, int userId) { - return null; + if(meal.isNew()){ + em.persist(meal); + return meal; + } else { + return em.merge(meal); + } + } @Override @@ -22,16 +39,28 @@ public boolean delete(int id, int userId) { @Override public Meal get(int id, int userId) { - return null; + Meal current = em.getReference(Meal.class , id); + int chekOwnerID = current.getUser().getId(); + + if(userId == chekOwnerID) return current; + else return ValidationUtil.checkNotFound(current, String.valueOf("Meal id = " + userId)); + } +// @Override +// public List getAll(int userId) { +// return (List) em.createQuery("SELECT m FROM Meal m WHERE m.user.id = :userId") +// .setParameter("userId" , userId) +// .getResultList(); +// } + @Override public List getAll(int userId) { - return null; + return em.createNamedQuery(Meal.GET_ALL, Meal.class).setParameter(1,userId).getResultList(); } @Override public List getBetween(LocalDateTime startDate, LocalDateTime endDate, int userId) { - return null; + return em.createNamedQuery(Meal.GET_BETWEEN , Meal.class).setParameter(1, userId).setParameter(2, startDate).setParameter(3 , endDate).getResultList(); } } \ No newline at end of file diff --git a/src/main/resources/spring/spring-db.xml b/src/main/resources/spring/spring-db.xml index 3140927..ad2f86e 100644 --- a/src/main/resources/spring/spring-db.xml +++ b/src/main/resources/spring/spring-db.xml @@ -11,8 +11,8 @@ - - + + @@ -21,15 +21,6 @@ - - - - - - - - @@ -50,6 +41,15 @@ + + + + + + + +