java - Spring 数据 jpa LazyInitializationException : no Session

标签 java spring hibernate jpa spring-data-jpa

我对 Spring-data-jpa 项目有疑问。

Java配置文件

...

@Configuration
@EnableJpaRepositories("it.myproject.data")
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ, proxyTargetClass = true)
@PropertySource("classpath:/it/myproject/application.properties")
public
        class DBConfig
{

    private static final
            String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan";
    @Resource
    private
            Environment environment;

    @Bean
    public
            DataSource dataSource()
    {
        EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
        return builder.setType(EmbeddedDatabaseType.H2).build();
    }

    @Bean
    public
            EntityManagerFactory entityManagerFactory()
    {
        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setGenerateDdl(true);
        vendorAdapter.setShowSql(true);
        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        factory.setJpaVendorAdapter(vendorAdapter);
        factory.setPackagesToScan(environment.getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN));
        factory.setDataSource(dataSource());
        factory.afterPropertiesSet();
        return factory.getObject();
    }

    @Bean
    public
            PlatformTransactionManager transactionManager()
    {
        JpaTransactionManager txManager = new JpaTransactionManager();
        txManager.setEntityManagerFactory(entityManagerFactory());
        return txManager;
    }
}

为了测试一切正常我创建了这个方法

@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());
        });
    }

我的实体是:

@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;

但是我收到了这个错误信息:

2014-04-09 12:31:54 TRACE LazyInitializationException:53 - 未能延迟初始化角色集合:it.myproject.data.person.Person.books,无法初始化代理 - 无 session org.hibernate.LazyInitializationException:延迟初始化角色集合失败:it.myproject.data.person.Person.books,无法初始化代理 - 无 session

你能帮帮我吗? 谢谢

最佳答案

已解决。我从配置中删除了“(mode = AdviceMode.ASPECTJ, proxyTargetClass = true)”,现在它工作正常。谢谢大家!

之前->

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

关于java - Spring 数据 jpa LazyInitializationException : no Session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22960268/

相关文章:

java - 从已登录的 Windows 中获取用户名?对于我的 Swing 申请

java - init-method 的确切替代方案(基于 Java)

java - hibernate查询在java spring中不起作用

java - 我们如何确定 Connection.close() 被调用

java - hibernate get id=0 批量更新从更新 [0] 返回了意外的行数;实际行数 : 0; expected: 1

java - GWT 中的消息框

java - 该程序在内存分配方面的具体流程如何?

java - "java"中找到的 "jdk1.8.0_121/bin"文件与 "jdk1.8.0_121/jre/bin"中找到的文件有什么区别?

java - 通过hibernate从数据库读取数据

java - Hibernate 在同一事务中新创建的记录上的 save() 之后调用 get()