私は小さなコンソールアプリケーションを持っていて、hibernateで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 impl:
@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を使用してWebアプリからこれを実行する場合、この問題は発生しないことに注意してください。