有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用JPA使库对象数据库持久化?

我一直在一个小应用程序上使用JPA。我现在需要创建一个基本上扩展或封装图形数据结构对象的数据结构。需要将图形持久化到数据库中

对于我自己编写的持久化对象,扩展它们非常容易,扩展类也很容易持久化。然而,我现在发现自己想要在JGrahpT库中使用一个与图相关的对象库(节点、边、简单图、有向图等)。但是,基类没有定义为可持久化的JPA对象,因此我不确定如何将这些类保存到数据库中

我有一些想法,希望得到一些反馈

选项1)

使用decorator设计模式为基类的扩展版本添加持久性

挑战:

--如何保持类的私有字段处于正确状态?我是否只是扩展类,添加一个ID字段,并将其标记为持久性?JPA将如何从父类获取必要的字段?(类似ruby的运行时类修改在这里会很棒)

--有一个类层次结构(抽象图、有向图、有向加权图等)。如果我扩展以获得持久性,扩展类仍然不会有公共父类。我该如何解决这个问题?(再说一次,类似ruby的运行时类修改在这里会很棒)

选项2)复制粘贴整个代码库。修改每个文件的源代码,使其与JPA兼容

--显然,这是一项艰巨的工作

我相信还有其他选择。。你给我准备了什么


共 (2) 个答案

  1. # 1 楼答案

    如果使用的是已有的库,那么使用JPA注释的选项似乎非常有限。另一种选择是使用Hibernate XML映射文件之类的东西,而不是JPA。可以在类本身之外声明映射。私有字段不是问题,Hibernate将通过反射忽略访问修饰符。然而,根据代码的内部逻辑,即使这样做也可能会带来更多麻烦(例如,Hibernate使用特殊集合和代理,如果类直接访问它们的一些属性,而不是在内部使用getter方法,这将使您陷入困境)

    另一方面,我不明白为什么你会考虑选择2’大量的工作。创建ORM映射并不是一个无需思考的任务,不管你如何去做,而我个人认为,选项2可能是最不费力的方法。您可能希望将其作为补丁文件进行维护,以便能够及时更新库,而不仅仅是分叉

  2. # 2 楼答案

    基类是否遵循JavaBeans命名约定?如果是这样,您应该能够使用JPA的XML语法映射它们

    本规范第10章对此进行了记录:

    The XML descriptor is intended to serve as both an alternative to and an overriding mechanism for Java language metadata annotations.

    这个XML文件通常被称为orm。xml。这个schema is available online