Java Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° | Spring Boot Backend & Architecture. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΠΆΠ°Π²Π° Π΄Π»Ρ Developer. IT Π‘ΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ ΠΈ Coding Π·Π°Π΄Π°ΡΠΈ. Π£ΡΠΎΠΊΠΈ ΠΈ ΠΊΡΡΡΡ Π΄Π»Ρ ΡΠΎΡΡΠ° Π² Tech.
ΠΠ°ΡΠΊΠ° Β· 10 ΡΠ΅Π½ΡΡΠ±ΡΡ 2026 Π³.
π§ ΠΠ°ΠΊ Π½Π΅ ΡΠ»ΠΎΠ²ΠΈΡΡ LazyInitializationException Π² Spring Boot + Hibernate
π§ ΠΠ°ΠΊ Π½Π΅ ΡΠ»ΠΎΠ²ΠΈΡΡ LazyInitializationException Π² Spring Boot + Hibernate ΠΠ΄Π½Π° ΠΈΠ· ΡΠ°ΠΌΡΡ ΡΠ°ΡΡΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ JPA: org.hibernate.LazyInitializationException: failed to lazily initialize a collection π ΠΡΠΈΡΠΈΠ½Π°: Π»Π΅Π½ΠΈΠ²ΠΎ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΠ°Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ (LAZY) ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΠΠ Π²Π½Π΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ»ΠΎΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΊΡΡΡΠΈΡ Session. π‘ ΠΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ? β Π Π΅ΡΠ΅Π½ΠΈΠ΅ 1: @Transactional Π² ΡΠ΅ΡΠ²ΠΈΡΠ΅ Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Ρ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΠ΅ΡΡ ΠΊ Π»Π΅Π½ΠΈΠ²ΡΠΌ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΠΌ Π²Π½ΡΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° Ρ @Transactional: @Transactional public UserDto getUser(Long id) { User user = userRepository.findById(id) .orElseThrow(); // OK: ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ friends Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° Π² ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ return new UserDto(user.getName(), user.getFriends()); } β οΈ ΠΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ @Transactional Π² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°Ρ - ΡΡΠΎ ΠΏΠ»ΠΎΡ Π°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°. β Π Π΅ΡΠ΅Π½ΠΈΠ΅ 2: Fetch Join ΠΠΎΠ΄Π³ΡΡΠ·ΠΈΡΠ΅ Π½ΡΠΆΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΡΠ°Π·Ρ ΡΠ΅ΡΠ΅Π· JOIN FETCH: @Query("SELECT u FROM User u LEFT JOIN FETCH u.friends WHERE u.id = :id") Optional<User> findByIdWithFriends(@Param("id") Long id); π ΠΠ»ΡΡ: 1 Π·Π°ΠΏΡΠΎΡ Π²ΠΌΠ΅ΡΡΠΎ N (N+1 ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ΅ΡΠ°Π΅ΡΡΡ). π ΠΠΈΠ½ΡΡ: ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·Π±ΡΡΠΎΡΠ½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ°, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΠΌΠΈ. β Π Π΅ΡΠ΅Π½ΠΈΠ΅ 3: DTO ΠΏΡΠΎΠ΅ΠΊΡΠΈΡ ΠΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² - ΠΏΡΠΎΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°Π·Ρ Π² DTO: @Query(""" SELECT new com.example.UserDto(u.name, f.name) FROM User u LEFT JOIN u.friends f WHERE u.id = :id """) List<UserDto> findUserWithFriendNames(@Param("id") Long id); π ΠΡΠ³ΡΡΠΆΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½ΡΠΆΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅. ΠΡΡΡΡΠΎ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ, ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ. ΠΠ΅Π½ΠΈΠ²Π°Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ - ΠΎΠΊ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΡΠ΅ Π³ΡΠ°Π½ΠΈΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ. ΠΡΠΎΠ΅ΠΊΡΠΈΠΈ ΠΈ fetch join - Π²Π°ΡΠΈ Π»ΡΡΡΠΈΠ΅ Π΄ΡΡΠ·ΡΡ, Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. π @BookJava
ΠΠ°Π½Π°Π» Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΠΠ°ΠΊΡΠΈΠΌΠ΅ΡΠ΅ΡΠ°
1Β 609 ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΈΠΊΠΎΠ² Β· ΠΠ°ΡΠΊΠ°