Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据jpa LazyInitializationException:无会话_Java_Spring_Hibernate_Jpa_Spring Data Jpa - Fatal编程技术网

Java Spring数据jpa LazyInitializationException:无会话

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

我对SpringDataJPA项目有一个问题

JavaConfig文件

为了测试所有的工作都正常,我创建了这个方法

@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")