我有一个小型控制台应用程序,我正在使用 spring-data-jpa 和休眠。在独立的控制台应用程序中,当使用 spring-data-jpa 及其存储库时,我真的不知道如何延迟初始化集合。这是我的一些代码:
@Entity
public class User {
...
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="USER_ORDER_ID")
private Set<Order> orders = new HashSet<Order>();
...
}
存储库:
public interface UserRepository extends PagingAndSortingRepository<User, Long> {
public ArrayList<User> findByFirstNameIgnoreCase(String firstName);
}
服务内涵:
@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;
}
我的主要方法:
...
user = userRepository.findByFirstNameIgnoreCase("john").get(0);
orders = user.getOrders();
for (Order order : orders) {
LOGGER.info("getting orders: " + order.getId());
}
foreach 循环出现异常:
EVERE:无法延迟初始化角色集合:com.aki.util.User.orders,没有会话或会话关闭 org.hibernate.LazyInitializationException:无法延迟初始化角色集合:
请注意,从带有某种 OpenSessionInViewFilter 的 webapp 运行它时,我没有这个问题。