지연된 엔티티를 얻을 때 IDE에서 다음과 같은 예외 메시지가 표시됩니다 (프록시 엔티티에 저장된 위치를 찾을 수 없어서 전체 스택을 제공 할 수 없습니다).)이 예외에 대한 추적 : 여기 지연 초기화 된 인스턴스를 얻으려고 LazyInitializationException을합니다.
Method threw 'org.hibernate.LazyInitializationException' exception. Cannot evaluate com.epam.spring.core.domain.UserAccount_$$_jvste6b_4.toString()
내가 제대로 스택 추적입니다 내가 사용하려는 게으른 초기화 된 개체의 필드에 액세스하려고 후 : 나는 봄을 사용하고
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:165)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:286)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
at com.epam.spring.core.domain.UserAccount_$$_jvstfc9_4.getMoney(UserAccount_$$_jvstfc9_4.java)
at com.epam.spring.core.web.rest.controller.BookingController.refill(BookingController.java:128)
을 데이터, 구성된 JpaTransactionManager, 데이터베이스는 MySql, ORM 공급자는 최대 절전 모드 4입니다. 주석 @EnableTransactionManagement가 켜져 있고, @Transactional은 내가 상상할 수있는 곳이라도 있지만 아무 것도 작동하지 않습니다. 여기
는 관계입니다 :@Entity
public class User extends DomainObject implements Serializable {
..
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "user_fk")
private UserAccount userAccount;
..
@Entity
public class UserAccount extends DomainObject {
..
@OneToOne(mappedBy = "userAccount")
private User user;
..
.. 구성의 조각 :
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getRequiredProperty(PROP_NAME_DATABASE_DRIVER));
dataSource.setUrl(env.getRequiredProperty(PROP_NAME_DATABASE_URL));
dataSource.setUsername(env.getRequiredProperty(PROP_NAME_DATABASE_USERNAME));
dataSource.setPassword(env.getRequiredProperty(PROP_NAME_DATABASE_PASSWORD));
return dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setDataSource(dataSource());
entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistenceProvider.class);
entityManagerFactoryBean.setPackagesToScan(env.getRequiredProperty(PROP_ENTITYMANAGER_PACKAGES_TO_SCAN));
entityManagerFactoryBean.setJpaProperties(getHibernateProperties());
return entityManagerFactoryBean;
}
@Bean
public JpaTransactionManager transactionManager(@Autowired DataSource dataSource,
@Autowired EntityManagerFactory entityManagerFactory) {
JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
jpaTransactionManager.setEntityManagerFactory(entityManagerFactory);
jpaTransactionManager.setDataSource(dataSource);
return jpaTransactionManager;
}
..이 내가 UserAccount 검색하는 방법입니다 :
@RequestMapping(...)
@Transactional()
public void refill(@RequestParam Long userId, @RequestParam Long amount) {
User user = userService.getById(userId);
UserAccount userAccount = user.getUserAccount();
userAccount.setMoney(userAccount.getMoney() + amount);
}
최대 절전 모드를 버전은 4.3.8입니다. 최종, 스프링 데이터 1.3.4.RELEASE 및 MySql 커넥터 5.1.29.
다른 것이 필요한지 물어보십시오. 미리 감사드립니다.
스택 추적의이 부분은 아무것도 정말 보여줍니다. –
@ v.ladynev 전체 스택을 제공해야합니까? –
이'메소드가있는 부분은 org.hibernate.LazyInitializationException'을 던졌습니다. –