openjpa

我刚刚开始为Isis开发 OpenJPA对象库 。 在一般情况下,可以在persistence.xml文件中注册实体类型。 但是,Isis是一个框架,可以构建自己的元模型,并且可以自行确定哪些类构成实体。 因此,我不想强​​迫开发人员重复自己的工作 ,所以难题就变成了如何在Isis代码中以编程方式注册实体类型。

看起来很简单,如果有点丑陋的话。 OpenJPA允许以编程方式定义某些关键组件的实现; 这些在属性映射中指定,然后传递给javax.persistence.Persistence.createEntityManager(null,props) 。 但它也支持可用于通过setter注入初始化那些组件的语法。

在我的情况下,感兴趣的组件是openjpa.MetaDataFactory 。 有一次,我以为自己会写自己的实现。 但事实证明,标准实现满足了我的需要,因为它允许通过其setTypes(List <String>)增幅器注入类型。 字符串列表以;分隔列表形式传递到该属性中。

所以,这就是我最终得到的结果:

final Map<String, String> props = Maps.newHashMap();final String typeList = entityTypeList();
props.put("openjpa.MetaDataFactory","org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory(types=" + typeList + ")");// ... then add in regular properties such as
// openjpa.ConnectionURL, openjpa.ConnectionDriverName etc...entityManagerFactory = Persistence.createEntityManagerFactory(null, props);

在我的情况下, entityTypeList()看起来像这样:

private String entityTypeList() {final StringBuilder buf = new StringBuilder();// loop thru Isis' metamodel looking for types that have been annotated using @Entityfinal Collection<ObjectSpecification> allSpecifications = getSpecificationLoader().allSpecifications();for(ObjectSpecification objSpec: allSpecifications) {if(objSpec.containsFacet(JpaEntityFacet.class)) {final String fqcn = objSpec.getFullIdentifier();buf.append(fqcn).append(";");}}final String typeList = buf.toString();return typeList;
}

欢迎评论,一如既往

参考: Dan Haywood博客博客中的JCG合作伙伴 Dan Haywood以编程方式在OpenJPA中注册实体类型 。

翻译自: https://www.javacodegeeks.com/2012/06/registering-entity-types-with-openjpa.html

openjpa

openjpa_以编程方式向OpenJPA注册实体类型相关推荐

  1. 以编程方式向OpenJPA注册实体类型

    我刚刚开始为Isis开发 OpenJPA对象库 . 在一般情况下,可以在persistence.xml文件中注册实体类型. 但是,Isis是一个框架,可以构建自己的元模型,并且可以自行确定哪些类构成实 ...

  2. 网站HTML删除数据库中数据语句,如何以编程方式删除WebSQL中的数据库?

    开发人员选项 无法以编程方式枚举或删除数据库(还). Chrome开发者可以导航到chrome://settings/cookiessearch并删除任何数据库Opera开发者可以导航到opera:/ ...

  3. CodeFirst 的编程方式

    CodeFirst 的编程方式 第一步:创建控制台项目 第二步:添加新建项目→Ado.Net空实体模型 第三步:添加实体:Customer,添加几个必要的测试字段 第四步:添加实体之间的联系 第五步: ...

  4. 您如何确定以编程方式发送的电子邮件不会自动标记为垃圾邮件?

    这是一个棘手的问题,我一直依靠诸如基于权限的电子邮件(即仅发送给您有权发送给其的人)之类的技术,而不使用公然的垃圾邮件术语. 最近,我以编程方式发送的某些电子邮件已经开始自动洗牌到用户的垃圾邮件文件夹 ...

  5. 如何让ASP.NET默认的资源编程方式支持非.ResX资源存储

    之前写了两篇文章<.NET资源并不限于.ResX文件>(上篇.下篇),介绍了如何通过自定义ResourceManager的方式来扩展资源的存储形式.在那篇文章中,我定义了三种基于独立文件的 ...

  6. java模拟滑动事件_java - 以编程方式在Android视图中触发滑动动作事件 - SO中文参考 - www.soinside.com...

    我正在尝试以编程方式触发视图中的滑动.还有其他问题的答案,但他们没有为我工作.我还看到一些comments表示程序化的拖动/滚动因安全原因被禁用,这是真的吗?我很想找到一个明确的答案. 我尝试了以下方 ...

  7. ASP.NET MVC下的四种验证编程方式[续篇]

    ASP.NET MVC下的四种验证编程方式[续篇] 原文:ASP.NET MVC下的四种验证编程方式[续篇] 在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET ...

  8. 【转】EF三种编程方式的区别Database first ,Model first ,code first

    首先对于EF中先出现的datebase  first和model first两种编程方式,其的区别根据字面意思很容易能够理解. datebase  first就是代表数据库优先,那么前提就是先创建数据 ...

  9. (转)EF三种编程方式详细图文教程(C#+EF)之Database First

    Entity Framework4.1之前EF支持"Database First"和"Model First"编程方式,从EF4.1开始EF开始支持支持&quo ...

最新文章

  1. 队列优化dijsktra(SPFA)的玄学优化
  2. 利用序列化与反序列化对Java对象进行深度复制
  3. 配置redis禁用几个危险命令
  4. Eclipse设置字体大小等!
  5. 新版chrome调整开发者工具位置方式改变
  6. SAP Spartacus注入自定义的CurrentProductService
  7. Java 字符串分割陷阱
  8. 当代家长现状。。 | 今日最佳
  9. 一道大题决定去留:为什么synchronized无法禁止指令重排,却能保证有序性?
  10. scriptalert(1)/script
  11. 主流的web前端开发及调试工具
  12. 计算机专业问卷调查,大学生计算机专业调查问卷.doc
  13. 职称评审要满足什么条件
  14. Jquery最常见的ajax写法
  15. Scan Context 学习记录
  16. python输入逗号分隔_Python实现按逗号分隔列表的方法
  17. android linux 休眠 深度睡眠 查看 方法 调试
  18. ServiceMesh实战-服务网格是什么?
  19. 对于多线程程序,单核cpu与多核cpu是怎么工作的
  20. 深度学习究竟是什么,举个例子解释一下

热门文章

  1. 阿里巴巴对Java编程【应用结构】的规约
  2. Java GUI界面
  3. 19级、20级:班级日常分享,一天一瞬间
  4. 二叉树删除节点+思路分析
  5. java notify 指定_java的notify/notifyAll:如何notify指定的线程?
  6. mysql使用游标的访问过程_mysql存储过程中使用游标的实例_MySQL
  7. IDEA使用笔记(八)——自动生成 serialVersionUID 的设置
  8. nginx解析php失败,为什么nginx不能解析php?
  9. pythonnumpy教程_Python教程:numpy的基本介绍
  10. Maven常见问题之【-Dmaven.multiModuleProjectDirctory system property is not set】