- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
(注意:我非常熟悉 Java,但不熟悉 Hibernate 或 JPA - 还 :))
我想编写一个通过 JPA 与 DB2/400 数据库对话的应用程序,现在我可以获取表中的所有条目并将它们列出到 System.out(使用 MyEclipse 进行逆向工程)。我知道 @Table 注释导致名称与类一起静态编译,但我需要能够使用在运行时提供名称和架构的表(它们的定义相同,但我们有很多他们)。
显然这不是那么容易做到,我会很感激你的提示。
我目前选择 Hibernate 作为 JPA 提供程序,因为它可以处理这些数据库表未记录的情况。
那么,问题是,我如何在运行时告诉 JPA 的 Hibernate 实现类 A 对应于数据库表 B?
(编辑:Hibernate NamingStrategy 中重写的 tableName() 可能允许我解决这个固有限制,但我仍然更喜欢与供应商无关的 JPA 解决方案)
最佳答案
您需要使用 XML version配置而不是注释。这样您就可以在运行时动态生成 XML。
或者类似 Dynamic JPA 的东西你会感兴趣吗?
我认为有必要进一步澄清这个问题。
第一个问题是:可以存储实体的表集是否已知?我的意思是您不是在运行时动态创建表并希望将实体与它们相关联。例如,此场景要求在编译时 已知三个表。如果是这种情况,您可以使用 JPA 继承。 OpenJPA 文档详细说明了 table per class继承策略。
这种方法的优点是它是纯 JPA。然而它有局限性,因为表必须是已知的并且您不能轻易更改给定对象存储在哪个表中(如果这是您的要求),就像 OO 系统中的对象通常不会更改类一样或输入。
如果您希望它是真正动态的并在表之间移动实体(本质上),那么我不确定 JPA 是否适合您。一个awful lot of magic使 JPA 工作,包括加载时编织(检测)和通常的一个或多个缓存级别。更重要的是,实体管理器需要记录变化并处理管理对象的更新。据我所知,没有简单的工具可以指示实体管理器将给定实体存储在一个或另一个表中。
这样的移动操作将隐含地要求从一个表中删除并插入到另一个表中。如果有子实体,这会变得更加困难。请注意,这并非不可能,但这是一个非常不寻常的极端情况,我不确定是否有人会为此烦恼。
较低级别的 SQL/JDBC 框架,例如 Ibatis可能是更好的选择,因为它会给你想要的控制权。
我还考虑过在运行时动态更改或分配注释。虽然我还不确定这是否可能,但即使是,我也不确定它是否一定有帮助。我无法想象实体管理器或缓存不会被发生的那种事情弄得绝望。
我想到的另一种可能性是在运行时动态创建子类(作为匿名子类),但仍然存在注释问题,我再次不确定如何将其添加到现有的持久性单元。
如果您提供更多关于您正在做什么以及为什么这样做的详细信息,这可能会有所帮助。不管是什么,我倾向于认为您需要重新考虑您正在做的事情或您是如何做的,或者您需要选择一种不同的持久性技术。
关于java - JPA:如何在运行时指定类对应的表名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/906671/
我想检查我的应用程序或系统中是否存在库。在 Java 中,我通常执行 System.loadlibrary,但是有谁知道 C 中类似的相应调用吗? 最佳答案 是dlopen打开一个库,dlsym 从加
我在 typescript 中输入以下内容 export type Excludable = T & { isExcluded?: boolean } 其中过滤值: export type Filte
我最近在我的应用程序中添加了一种方法,可以自动格式化 TextView ,从“50000”到“50,000”,效果绝对完美。现在我遇到的问题是,在我的应用程序中,有多个按钮功能可以从该 TextVie
SELECT * FROM conversations WHERE chatMembers LIKE '%1%'AND chatMembers LIKE '%10%' 对话表 id | chatMem
我正在编写一个需要将 Java Date() 值保存到 MySQL 数据库的 RESTful Web 服务,但是,我不确定 MySQL 中可以保存 Java Date() 的数据类型是什么,或者我是否
同样,在任何 Red Hat 或 JBoss 站点上都没有关于此的信息,所以我在这里问... 我不确定是 13 还是 14。 最佳答案 Mapping the Community versions w
同样,在任何 Red Hat 或 JBoss 站点上都没有关于此的信息,所以我在这里问... 我不确定是 13 还是 14。 最佳答案 Mapping the Community versions w
我曾尝试使用 swift 开发一款利用 iPhone 的 3D 触摸硬件的游戏。然而,当我将我的应用程序提交到 App Store 时,它被拒绝了,因为该游戏无法在 iPad 上玩。 我的问题是,
Qt 的有序关联容器对应项 std::map是QMap , std::set是QSet , 对于无序关联容器 std::unordered_map是QHash . 我应该用什么来代替std::unor
JavaScript 方法 String.fromCharCode() 在以下意义上与 Python 的 unichar() 等效: print unichr(213) # prints Õ on t
正如谷歌在 "Discontinuing support for JSON-RPC and Global HTTP Batch Endpoints" 中提到的那样,Google API 客户端库已重新
我正在使用 MapLayer 和 MapOverlay 在 map 中创建自己的路径/折线,GPS 捕获的所有点都存储在一个结构中,以便我可以访问它们。随时。 现在,我希望路径在用户操作 map (缩
我们使用 Adobe Flash Builder 创建由 Flex 提供支持的交互式 Web 应用程序。现在我们正在寻找替代方案,让我们在 UI 设计和迎合 HTML5 的编码方面拥有同样的开发便
我想知道Android/Java 中类似C#/C++ 中的GetTickCount 方法的相应方法吗? 最佳答案 Android 为 SystemClock.uptimeMillis() .请注意,u
我用 Vue + Phaser 开始了新项目,但是当我尝试加载 Assets 时,this.game.load.image 中的“load”和“add”返回“undefined”。我尝试从 JS 文件
我是一名优秀的程序员,十分优秀!