有没有办法从数据库中分离模型对象实例?

Is there a way to detach model object instances from the database?

我正在尝试找出一种方法,将 activejdbc 模型从一个 JVM 上的服务器应用程序 运行 连线到另一个 运行 GUI 应用程序的 JVM。 GUI 应用程序无权访问数据库,因为它不在同一台机器上。在 GUI 上,当我尝试通过 setter 设置该模型实例的属性以更新一些字段以将模型发送回服务器进行更新时,我显然得到了关于没有数据库连接的异常。

我有办法通过覆盖 getMetaModeLocal() 方法来解决这个问题,但想知道是否有更简洁的解决方案?

异常情况如下:

Caused by: org.javalite.activejdbc.DBException: Failed to retrieve metadata from DB, connection: 'default' is not available
at org.javalite.activejdbc.Registry.init(Registry.java:133)
at org.javalite.activejdbc.Model.getMetaModel(Model.java:67)

我希望在调用 saveIt() 之前无需连接数据库即可更新模型。

您有两种选择:

  1. 请勿在您的 GUI 应用中使用模型。在服务器端,您可以使用 Model.toMap() 方法将模型序列化为 Maps,并简单地将映射发送到 UI。如果您需要进行更新,您可以为同一张地图设置新值,然后将其发送回服务器端,您可以在服务器端使用 model.fromMap(map).save() 方法。换句话说,无需通过线路发送模型。

  2. 等到这个问题被修复:Add ability to use model classes without connecting to the DB。这项新功能目前正在积极开发中,预计将在几周内完成。它将允许您在没有数据库的情况下将模型从一个 JVM 传递到另一个 JVM,因为将在构建期间而不是在 运行 时查询数据库模式。