为了账号安全,请及时绑定邮箱和手机立即绑定

关于Spring的CrudRepository返回Entity的问题

关于Spring的CrudRepository返回Entity的问题

函数式编程 2019-03-12 13:15:59
各位高手,我在使用hibernate、jpa、springdata集成时遇到了如下的问题:1.model@Entity@Table(name="group",schema="sc")@Inheritance(strategy =  InheritanceType.TABLE_PER_CLASS)public class Group extends AbstractEntity{    ...        @ElementCollection(fetch= FetchType.EAGER)    @NotNull    @Column(name="user")    @CollectionTable(name = "t_group_users", schema = "sc", joinColumns = @JoinColumn(name = "group_id"))    private List<String> users;}2.repositorypublic interface GroupRepository extends CrudRepository<Group, UUID>{}3.config@Configuration@EnableJpaRepositories(basePackages = { "com.**.**" })public class RepositoryTestConfig{    @Bean    public PlatformTransactionManager transactionManager(EntityManagerFactory emf)    {        JpaTransactionManager transactionManager = new JpaTransactionManager();        transactionManager.setEntityManagerFactory(emf);        return transactionManager;    }    @Bean    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource)    {        LocalContainerEntityManagerFactoryBean emfb = new LocalContainerEntityManagerFactoryBean();        emfb.setDataSource(dataSource());        emfb.setJpaVendorAdapter(jpaVendorAdapter());        emfb.setPackagesToScan("com.**.**.model");        Properties properties = new Properties();        properties.setProperty("hibernate.hbm2ddl.auto", "create");        properties.setProperty("hibernate.format_sql", "true");        emfb.setJpaProperties(properties);        return emfb;    }    @Bean    public JpaVendorAdapter jpaVendorAdapter()    {        HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();        adapter.setDatabase(Database.H2);        adapter.setShowSql(false);        adapter.setGenerateDdl(false);        adapter.setDatabasePlatform("org.hibernate.dialect.H2Dialect");        return adapter;    } 但我使用groupRepository.findOne方法时,users返回的是org.hibernate.collection.internal.PersistentBag类型,而不是ArrayList类型,请问是什么原因?
查看完整描述

1 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

这个PersistentBag也是List的一种实现。Hibernate为啥不直接用ArrayList呢,因为它要支持懒加载,所以需要在类似ArrayList实现的基础上再包装一层。比如你调用List的get、size之类的方法,如果是懒加载,这个PersistentBag会先去把数据从数据库里面读进来,再做操作。如果是Eager的(就像你的代码设置的),那么就和一般的ArrayList没啥区别了。

对于用户来说,是没什么感受的,你就把他当List用就好。


查看完整回答
反对 回复 2019-04-24
  • 1 回答
  • 0 关注
  • 590 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信