Mam małą aplikację konsolową i używam spring-data-jpa z hibernacją. Naprawdę nie mogę wymyślić, jak leniwy zainicjować kolekcje podczas korzystania z spring-data-jpa z jego repozytoriami, w samodzielnej aplikacji konsolowej. Oto niektóre z moich kodu:jak leniwe ładowanie kolekcji przy użyciu spring-data-jpa, z hibernacją, z aplikacji konsolowej
@Entity
public class User {
...
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="USER_ORDER_ID")
private Set<Order> orders = new HashSet<Order>();
...
}
repozytorium:
public interface UserRepository extends PagingAndSortingRepository<User, Long> {
public ArrayList<User> findByFirstNameIgnoreCase(String firstName);
}
impl usługowa:
@Service
@Repository
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
public ArrayList<User> findByFirstNameIgnoreCase(String firstName) {
ArrayList<User> users = new ArrayList<User>();
users = userRepository.findByFirstNameIgnoreCase(firstName);
return users;
}
moim głównym metoda:
...
user = userRepository.findByFirstNameIgnoreCase("john").get(0);
orders = user.getOrders();
for (Order order : orders) {
LOGGER.info("getting orders: " + order.getId());
}
pętla foreach dostaje wyjątek :
EVERE: nie udało się leniwie zainicjować kolekcję rola com.aki.util.User.orders, brak sesji lub sesja została zamknięta org.hibernate.LazyInitializationException: nie udało się leniwie zainicjować kolekcję Rola:
Należy zauważyć, że nie mam tego problemu podczas uruchamiania tego z aplikacji webowej z jakimś typem OpenSessionInViewFilter.
Sprawdź to: http://stackoverflow.com/questions/15359306/how-to-load-lazy-fetched-items-from-hibernate-jpa-in- my-controller –