Не удаляется животное из customer

81
05 декабря 2021, 19:50

При регистрации клиента можно создать несколько животных, которые будут ему принадлежат, добавить животных получается, но удалить нет.

При попытке удалить животное Pet из Customer, пишет что их нет, но они были добавлены.

Ошибка:

Caused by: java.lang.NullPointerException at com.eventim.petshop.entities.PetRepository.deletePet(PetRepository.java:20) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566)

Код:

@Stateful
public class PetRepository extends AbstractRepository {
    private Pet pet;
    Customer customer;
    public Pet createPet(String name) {
        Pet pet = new Pet();
        pet.setName(name);
        entityManager.persist(pet);
        return pet;
    }
    public void deletePet(String name) {
       for (Pet pets : customer.getPets() ){ // видимо здесь не находит
           if (pets.getName().equals(name))
               entityManager.remove(pets.getName());
       }
    }
}

Клиент:

    @NamedQuery(name ="CUSTOMER.findByLogin", query = "SELECT c FROM CUSTOMER c WHERE c.login = ?1")
    @Entity(name = "CUSTOMER")
    public class Customer {
        //public static final String FIND_BY_USERNAME_AND_PASSWORD = "findByUsernameAndPassword";
        public static final String FIND_BY_USERNAME = "SELECT c FROM CUSTOMER c WHERE c.login = ?1";

        @Id
        @GeneratedValue
        private Integer id;
        @Column(unique = true)
        private String login;
        @Column
        private String password;
        @OneToMany
        private List<Pet> pets = new ArrayList<>();
      get и set ---
public Collection<Pet> getPets() { return pets; }
        public void setPets(List<Pet> pets) {
            this.pets = pets;
        }

      /*  public List<Customer> getAllCustomer(){
            Query query;
            return query.getResultList();
        }*/

        public boolean isPetExist(String name){
            for (Pet pet: getPets()){
                if (pet.getName().equals(name)){
                    return true;
                }
            }
            return false;
        }
    }

Maneger:

@Stateful
public class PetManager {
    @EJB
    private PetRepository petRepository;
    @EJB
    private CustomerRepository customerRepository;
    public void createPet(Integer customerId, String name) {
        if (!customerRepository.findCostumerById(customerId).isPetExist(name)){
        Pet pet = petRepository.createPet(name);
        customerRepository.addPetToCustomer(customerId, pet);}
        else {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Pets already exits"));
        }
    }
    public void deletePet(Integer customerId, String name) {
        if (customerRepository.findCostumerById(customerId).isPetExist(name)){
            petRepository.deletePet(name); }
        else {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Pets not exits"));
        }
    }
}
Answer 1
  public void deletePet(Integer customerId, String name) {
        if (customerRepository.findCostumerById(customerId).isPetExist(name)){
            Collection<Pet> temp =  customerRepository.findCostumerById(customerId).getPets();
            Optional<Pet> pet =  temp.stream().filter(p->p.getName().equals(name)).findFirst();
            if (pet.isPresent()) petRepository.deletePet(pet.get());
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Pets deleted")); }
        else {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Pets not exits"));
        }
    }
READ ALSO
Поиск простых чисел за O(n)

Поиск простых чисел за O(n)

Есть алгоритм для быстрого поиска простых чиселЯ попытался реализовать его

158
Почему выражение всегда = true?

Почему выражение всегда = true?

У меня возникла проблемаМой цикл while должен выполнятся до тех пор, пока я не введу либо C, либо F

196
Прочитать PDF с сайта

Прочитать PDF с сайта

В процессе создания приложения понадобилось чтениеpdf с сайта

107
Библиотеки JUnit4 и Junit не найдены в NetBeans

Библиотеки JUnit4 и Junit не найдены в NetBeans

При входе в IDE NetBeans, выводит предупреждение библиотеки JUnit4 и Junit не найдены

145