各位高手,我在使用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用就好。
添加回答
举报
0/150
提交
取消