栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用JPA 2.0以编程方式加载Entity类?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用JPA 2.0以编程方式加载Entity类?

在Spring的帮助下,我以符合JPA的方式进行了此操作。

我的“ persistence.xml”看起来是空的,

<persistence-unit>
元素中没有列出任何实体。

然后,我编写了一个实现PersistenceUnitPostProcessor的类,如下所示:

import java.util.Set;import javax.persistence.Entity;import javax.persistence.MappedSuperclass;import org.reflections.Reflections;import org.reflections.scanners.TypeAnnotationsScanner;import org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo;import org.springframework.orm.jpa.persistenceunit.PersistenceUnitPostProcessor;public class ReflectionsPersistenceUnitPostProcessor implements PersistenceUnitPostProcessor {    private String reflectionsRoot;    private Logger log = LoggerFactory.getLogger(ReflectionsPersistenceUnitPostProcessor.class);    @Override    public void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui) { Reflections r = new Reflections(this.reflectionsRoot, new TypeAnnotationsScanner()); Set<String> entityClasses = r.getStore().getTypesAnnotatedWith(Entity.class.getName()); Set<String> mappedSuperClasses = r.getStore().getTypesAnnotatedWith(MappedSuperclass.class.getName()); for (String clzz : mappedSuperClasses) {         pui.addManagedClassName(clzz); } for (String clzz : entityClasses) {         pui.addManagedClassName(clzz); }    }    public String getReflectionsRoot() { return reflectionsRoot;    }    public void setReflectionsRoot(String reflectionsRoot) { this.reflectionsRoot = reflectionsRoot;    }}

然后我像这样调整了我的spring context xml:

<bean id="entityManagerFactory" > <property name="dataSource" ref="dataSource" /> <property name="jpaVendorAdapter">         <bean >      <property name="showSql" value="false" />      <property name="generateDdl" value="true" />      <property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect" />         </bean> </property> <property name="persistenceUnitName" value="GenericPersistenceUnit"/> <property name="persistenceXmlLocation" value="classpath:meta-INF/persistence.xml"/> <property name="persistenceUnitPostProcessors">         <list>      <bean >   <property name="reflectionsRoot" value="com.austinmichael"/>      </bean>         </list> </property>    </bean>

注意

ReflectionsPersistenceUnitPostProcessor
在persistenceUnitPostProcessors设置中的注册。

就是这样。每个

MappedSuperclass
在类路径上具有JPA实体或注释的类都将添加到类路径中。我必须给反射一个要扫描的包名称的前缀,这就是为什么要使用它的原因
com.austinmichael
ReflectionsPersistenceUnitPostProcessor
如果您的实体不共享通用的包名前缀,则可以使用其他包名前缀注册一秒钟。

但是,这是JPAVendor不可知的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486888.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号