При регистрации клиента можно создать несколько животных, которые будут ему принадлежат, добавить животных получается, но удалить нет.
При попытке удалить животное 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"));
}
}
}
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"));
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть алгоритм для быстрого поиска простых чиселЯ попытался реализовать его
У меня возникла проблемаМой цикл while должен выполнятся до тех пор, пока я не введу либо C, либо F
При входе в IDE NetBeans, выводит предупреждение библиотеки JUnit4 и Junit не найдены