FlexJavaBlazeDS仪表板-使用Spring/JDBC还是Hibernate?

FlexJavaBlazeDS仪表板-使用Spring/JDBC还是Hibernate?,java,apache-flex,hibernate,spring,jdbc,Java,Apache Flex,Hibernate,Spring,Jdbc,我正在为我工作的公司开发一个IT监控仪表板。该系统主要对文件、数据库和服务器进行监控。系统将有一小部分,允许用户配置有关系统的静态数据,例如:文件位置、服务器名称等 应用程序也是如此。将是一个仪表板许多应用程序将包括发布数据到flex客户端以更新所有监控视图。因此,将有有限的数据库活动,即:插入/更新/删除 我目前正在后端Java代码中使用Spring/JDBC组合。我最近考虑过迁移到Hibernate,以便于CRUD操作(与Spring/JDBC相比)的使用 有人对此有什么想法吗?因为我正在做

我正在为我工作的公司开发一个IT监控仪表板。该系统主要对文件、数据库和服务器进行监控。系统将有一小部分,允许用户配置有关系统的静态数据,例如:文件位置、服务器名称等

应用程序也是如此。将是一个仪表板许多应用程序将包括发布数据到flex客户端以更新所有监控视图。因此,将有有限的数据库活动,即:插入/更新/删除

我目前正在后端Java代码中使用Spring/JDBC组合。我最近考虑过迁移到Hibernate,以便于CRUD操作(与Spring/JDBC相比)的使用

有人对此有什么想法吗?因为我正在做的Spring/JDBC足够了吗?Spring/JDBC是可伸缩的吗?如果仪表板在用户(可伸缩性)和功能(更多数据库操作)方面有所增长,我将更加关注未来

PS:我以前没有使用过hibernate,但使用过JDO/Kodo和Toplink,它们的工作方式与hibernate的工作方式相同

谢谢
Mike

我猜您已经了解了blaze ds的远程类功能以及发布/订阅功能。这有效地允许您将Java类映射到动作脚本类,然后通过网络发送动作脚本类

如果您已经在服务器上定义了一个可以使用的实体模型,那么很容易集成hibernate或类似的技术,因为它可以在实体/域级别工作

您可以采用自顶向下的方法,并使用hibernate从带注释的实体模型为您生成模式。我不熟悉spring/jdbc,但hibernate可以大大简化事情,即使对于简单的应用程序也是如此

就可伸缩性而言,hibernate不应该是一个问题,因为它有许多高级特性,例如二级/分布式缓存


如果您对学习如何从类生成JPA/hibernate映射感兴趣,请参阅netbeans教程。

如果您使用过Kodo/JDO,那么DataNucleus对您来说应该很简单。取决于对象图的复杂性,是否有必要针对JDBC使用这种解决方案;您没有给出数据的关系复杂性的概念。使用DataNucleus,您可以像使用Kodo一样使用二级缓存,在可扩展性方面提供很大帮助


--Andy()

出于上述所有原因,我会选择Hibernate,并使用DTO模式在Java和Flex之间进行通信。您可能不想直接通过网络发送Hibernate域对象

Hibernate(和大多数其他ORM)与Spring/JDBC之间的关键区别在于,大多数ORM支持“延迟加载”,这在远程处理应用程序中可能是非常有问题的。假设您正在使用Hibernate,并且有一个Person类,该类包含一组Address对象。如果向Hibernate请求Person实例,默认情况下,它将只加载Person的简单属性,“addresses”集合将是一个空代理。当您第一次访问“地址”时,Hibernate将执行一些SQL来神奇地将数据“延迟加载”到addresses集合中。当您将具有惰性地址的Person传递给正在使用的序列化程序时,它将遍历整个对象图,并触发它可以到达的每个惰性代理的惰性加载。在一个复杂的对象模型中,这可能会导致数千个SQL查询在将对象图发送到服务器之前完全加载对象图,更不用说将通过网络发送的多兆字节数据了

其中一张海报提到将DTO与Hibernate结合使用,这是一个不错的建议,因为它有助于解决这个延迟加载问题。实际上,您使用DTO包装所有实体,然后只将DTO返回序列化程序。展开上一个示例,假设Person还绑定了一个Department对象。PersonDto可以有一个“departmentId”属性,当访问它时,它只从底层Department对象中提取“id”属性。由于Hibernate惰性实体代理始终使用其标识符填充,因此您可以访问此数据,而无需延迟加载对象。由于PersonDto实际上并不向序列化程序公开Department对象,因此它将无法遍历它并尝试加载所有数据

在Hibernate中使用DTO还有一种替代方法,就是对那些Hibernate惰性代理执行一些非常奇特的操作,以便它们能够很好地使用序列化程序。看看一个名为“如果你想了解更多”的项目

您还提到了可伸缩性,当然答案是“视情况而定”。:)在处理更多用户方面,使用Spring/JDBC调优SQL会更容易,这可能会提高性能并减少数据库负载,从而允许您支持更多用户。然而,就代码可维护性和您需要做的工作量而言,Hibernate可能提供了一个更好的选择,因为它自动化了许多繁琐的crud功能