2

Я использую весенний ботинок для отдыха задней системы с данными весны, У меня есть три основных слоя (контроллер, сервис, дао).Весенняя загрузка и граница транзакции

Я аннотировал класс обслуживания с помощью @Transactional и в рамках одного из его методов я получаю некоторый объект, имеющий отношения @ManyToMany с другим Entity.

Я хочу только получить основную сущность, и я зависим от ленивого @ManyToMany.

Проблема заключается в возврате из службы в контроллер, когда я нажимаю на (многие) стороны, SQL-запрос является проблемой и извлекает коллекцию, как если бы транзакция все еще работает !!

@SpringBootApplication 
@ComponentScan(value = { "net.pd.ethraa" }) 
@EnableJpaRepositories(basePackages = { "net.pd.ethraa.dao" }) 
@EntityScan(basePackages = "net.pd.ethraa.common.model") 
@EnableTransactionManagement 
public class EthraaApplication extends SpringBootServletInitializer { 
} 

@RequestMapping(path = "/get/{id}", method = RequestMethod.GET) 
    public Account getAccount(@PathVariable("id") Long id) { 
    Account account = accountService.find(id); 

    for (Permission p : account.getPermissions()) { 
     System.out.println(p.getName()); 
    } 
    return account; 

    } 


@Service 
@Transactional 
public class AccountServiceImpl implements AccountService { 

@Override 
    public Account find(Long id) { 
    return accountDao.findOne(id); 

    } 
} 

@Repository 
public interface AccountDao extends CrudRepository<Account, Long> {} 


@Entity 
@Table(name = "ACCOUNT", uniqueConstraints = @UniqueConstraint(columnNames = { "mobile", "email" })) 
public class Account extends BaseEntity { 
@ManyToMany 
    @JoinTable(name = "ACCOUNT_PERMISSION") 
    private List<Permission> permissions; 
} 

Я ожидаю, когда я попал в коллекцию вне службы она должна быть за пределами транзакции и дает ленивое исключение, но это не делает?

ответ

3

Spring Boot позволяет по умолчанию использовать OpenEntityManagerInViewInterceptor, что допускается для этого.

Вы можете отключить его, используя следующий свойство в файле конфигурации приложения:

spring.jpa.open-in-view=false 
+0

Это верно для всех сценариев? Включает ли Spring загрузку через какое-либо свойство приложения/аннотацию/класс? Пожалуйста, направляйте. Я попробовал пример в последних версиях весенней загрузки> 1.4.2. У меня есть ленивое исключение загрузки. – Barath

+0

В текущей версии Spring Boot этот параметр должен по умолчанию «true». Полные условия регистрации этого перехватчика можно увидеть в [исходном коде] (https://github.com/spring-projects/spring-boot/blob/v1.4.3.RELEASE/spring-boot-autoconfigure/src/main /java/org/springframework/boot/autoconfigure/orm/jpa/JpaBaseConfiguration.java#L185). Если у вас возникли проблемы, попробуйте запустить отдельный вопрос с вашим примером, пожалуйста. –

Смежные вопросы