Generyczne DAO W Spring

Odpowiedz Nowy wątek
2017-04-27 19:44

Rejestracja: 6 lat temu

Ostatnio: 1 rok temu

0

Napisałem prosty interfejs DAO w Spring Data

@Repository
@Transactional
public interface GenericDAO<T, ID extends Serializable> extends JpaRepository<T, ID> {}

następnie stworzyłem interfejs serwisu

package com.jonki.Service;

import java.io.Serializable;

public interface GenericService<T, ID extends Serializable> {
    public T save(T entity);
}

i na końcu sam serwis

@Service
public class GenericServiceImpl<T, ID extends Serializable> implements GenericService<T, ID> {

    @Autowired
    private GenericDAO<T, ID> genericDAO;

    @Override
    public T save(T entity) {
        return genericDAO.save(entity);
    }
}

Problem polega na tym, ze program nawet nie chce się skompilować, bo wywala błąd

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'genericDAO': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object

Caused by: java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object

edytowany 1x, ostatnio: Jonki1997, 2017-04-27 19:47

Pozostało 580 znaków

2017-04-27 20:11
Moderator

Rejestracja: 16 lat temu

Ostatnio: 6 godzin temu

0

A możesz ty mi wyjaśnić co niby Spring miał stworzyć kiedy zrobiłeś:

@Service
public class GenericServiceImpl<T, ID extends Serializable> implements GenericService<T, ID> {

? o_O Jaki miałby być typ T? Chciałbym zrozumieć logikę jaką kierowałeś się pisząc ten kod...


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
edytowany 1x, ostatnio: Shalom, 2017-04-27 20:17
Jak się patrze na biedakody niektórych to wcale bym się nie zdziwił jakby takie coś robili :D - scibi92 2017-04-27 20:16

Pozostało 580 znaków

2017-04-27 20:19

Rejestracja: 5 lat temu

Ostatnio: 7 godzin temu

Lokalizacja: Warszawa

0

GenericService to jakaś tragedia okrutna, chyba nie wiesz po co są Servisy :D
Nie serwisy nie są po to żeby wywoływac 1 metodę z repository (no dobra czasami może się tak zdarzyć, ale czasami)

Nie ma żadnych GenericDAO dodatkowych. Najpierw poczytaj dokumentacje Spring Data JPA ze zrozumieniem :
https://docs.spring.io/spring[...]/docs/current/reference/html/

To jest przykładowa metoda w Service który jest Servisem:

    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public long registerUser(UserRegisterDTO userRegisterDTO) {
        String encryptedPassword = passwordEncoder.encode(userRegisterDTO.getPassword());
        User userBeforePersistence = mapRegisterFormToEntity(userRegisterDTO,encryptedPassword);//prywatna metoda
        Authority customerAuthority = authorityRepository.findBySymbol(Authority.CUSTOMER);
        userBeforePersistence.setAuthorities(Sets.newHashSet(customerAuthority));
        User persistedUser = userRepository.save(userBeforePersistence);
        mailService.send(createRegisterEmail(userRegisterDTO));//odwołanie do prywatnej metody
        return persistedUser.getUserId();
    }

Która w sumie mogłaby i tak być lepsza


Nie pomagam przez PM. Pytania zadaje się na forum.
edytowany 1x, ostatnio: scibi92, 2017-04-27 20:23

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0