Java Spring数据jpa LazyInitializationException:无会话
我对SpringDataJPA项目有一个问题 JavaConfig文件 为了测试所有的工作都正常,我创建了这个方法Java Spring数据jpa LazyInitializationException:无会话,java,spring,hibernate,jpa,spring-data-jpa,Java,Spring,Hibernate,Jpa,Spring Data Jpa,我对SpringDataJPA项目有一个问题 JavaConfig文件 为了测试所有的工作都正常,我创建了这个方法 @Transactional public void doIt() { PersonDTO created = new PersonDTO(); created.setId(null); created.setFirstName("Pluto"); crea
@Transactional
public
void doIt()
{
PersonDTO created = new PersonDTO();
created.setId(null);
created.setFirstName("Pluto");
created.setLastName("Paperino");
Person pippo= repositoryPersonService.create(created);
for (int i = 0; i < 10; i++) {
BookDTO bookDTO = new BookDTO();
bookDTO.setTitle("Fantasia" + i);
bookDTO.setPerson(pippo);
repositoryBookService.create(bookDTO);
}
repositoryPersonService.findAll().stream().forEach((Person t) -> {
System.out.println(t.getBooks());
});
}
@Transactional
公众的
void doIt()
{
PersonDTO created=新建PersonDTO();
created.setId(null);
创建。setFirstName(“冥王星”);
已创建。setLastName(“Paperino”);
Person pippo=repositoryPersonService.create(已创建);
对于(int i=0;i<10;i++){
BookDTO BookDTO=新BookDTO();
书名为“幻想曲”+i;
bookDTO.setPerson(pippo);
repositoryBookService.create(bookDTO);
}
repositoryPersonService.findAll().stream().forEach((人员t)->{
System.out.println(t.getBooks());
});
}
我的实体是:
@Entity
@Table(name = "persons")
public
class Person
implements Serializable
{
private static final
long serialVersionUID = 198765467898765L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private
Long id;
@Column(name = "creation_time", nullable = false)
@Temporal(javax.persistence.TemporalType.DATE)
private
Date creationTime;
@Column(name = "first_name", nullable = false)
private
String firstName;
@Column(name = "last_name", nullable = false)
private
String lastName;
@Column(name = "modification_time", nullable = false)
@Temporal(javax.persistence.TemporalType.DATE)
private
Date modificationTime;
@OneToMany(fetch = FetchType.LAZY)
private
List<Book> books;
@Version
private
long version = 0;
@实体
@表(name=“persons”)
公众的
班主任
实现序列化接口
{
私人静态决赛
长serialVersionUID=198765467898765L;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私有的
长id;
@列(name=“创建时间”,null=false)
@时态(javax.persistence.TemporalType.DATE)
私有的
日期创建时间;
@列(name=“first\u name”,nullable=false)
私有的
字符串名;
@列(name=“last_name”,nullable=false)
私有的
字符串lastName;
@列(name=“修改时间”,null=false)
@时态(javax.persistence.TemporalType.DATE)
私有的
日期修改时间;
@OneToMany(fetch=FetchType.LAZY)
私有的
列出书籍;
@版本
私有的
长版本=0;
但我收到了这个错误消息:
2014-04-09 12:31:54跟踪LazyInitializationException:53-未能延迟初始化角色集合:it.myproject.data.person.person.books,无法初始化代理-无会话
org.hibernate.LazyInitializationException:未能延迟初始化角色集合:it.myproject.data.person.person.books,无法初始化代理-无会话
你能帮我吗?
谢谢似乎
@Transactional
不起作用,因为repositoryPersonService.findAll()
正在返回一个分离实体的集合。然后,在尝试循环这些实体并访问延迟初始化的集合时,我们遇到了LazyInitializationException
要确认这一点,请尝试在调用findAll
的方法中放置断点,并查看是否应用了事务方面
要将@Transactional
应用于测试方法,请查看它是一个被组件扫描捕获的Springbean(使用组件扫描(“some.package”)
注释)。已解决。我从配置中删除了“(mode=AdviceMode.ASPECTJ,proxyTargetClass=true)”,现在它可以正常工作了。Thaks伙计们
之前->
@Configuration
@EnableJpaRepositories("it.myproject.data")
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ, proxyTargetClass = true)
@PropertySource("classpath:/it/myproject/application.properties")
现在->
@Configuration
@EnableJpaRepositories("it.myproject.data")
@EnableTransactionManagement
@PropertySource("classpath:/it/myproject/application.properties")
如果您只是正常地(即不使用流)迭代repositoryPersonService.findAll(),是否会遇到相同的问题?
@Configuration
@EnableJpaRepositories("it.myproject.data")
@EnableTransactionManagement
@PropertySource("classpath:/it/myproject/application.properties")