java - 使用 GET 将数据对象从客户端传输到服务器以持久保存数据的方式是什么?

标签 java hibernate gwt jpa

如果您使用 JPA 或其他类型的持久性,您可能有一种方法可以保存通过 ajax 发送给客户端的记录。

编辑:接口(interface)是用 GWT 完成的,所以所有的 ajax 调用都是经典的 java 方法(转换为等效的 javascript)

让我们以 Person 类为例,它是数据库中的一个实体。 Person 有四个字段:name, birthday, id, email

当您通过 ajax 从服务器加载一个人时,您通常会向客户端发送一个 Person 对象。

在您的人物编辑器中,您显示姓名、生日和电子邮件。编辑 Person 对象时,您可能希望显示 id。

有两种情况:

  • save person : 只能改email 但可以显示id
  • 创建人:可以更改电子邮件、姓名和生日

当你将刚刚编辑好的数据发送到服务器时,你是如何进行的?

我看到了几种方法:

  • 发送一个 Person 对象。在这种情况下,您必须处理您持久保存的数据,而不仅仅是使您从客户端接收到的人员对象进入持久模式,因为黑客可以发送您可能不想更改的数据(并且您不能信任禁用这些的接口(interface)变化)。在这种情况下,也有几种方法:
    • 使用两个函数(保存和创建),在服务器上创建一个新的 Person 对象(或者如果您在保存方法中,则通过 id 加载持久化实例)并将您想要的所有字段从客户端 Person 对象复制到持久化对象一个
    • 使用一个函数 (saveOrCreate) 并检查 id 是否存在。它等同于将两个函数合并为一个带有大“if”的上述方法
  • 将数据发送到服务器(电子邮件、生日、姓名、ID(在编辑的情况下))。当您这样做时,创建一个新的 Person 对象(或加载持久的对象)并将数据复制到这个持久的实例。

总而言之,您具有以下方法签名之一(仅用于编辑案例):

  • Person savePerson(Person person);
  • Person savePerson(String id, String email);

我看到了每种方法的优缺点。例如,第一个允许在不修改所有 savePerson 调用的情况下快速更改 Person 模型。但与第二种方法相比,它的可读性较差,无法了解真正保存的内容。

我不知道什么是最好的,以及您是否知道另一种方法。那么,你怎么做?

最佳答案

使用域对象进行数据传输总是很好的。在 GWT 中,您必须定义接口(interface)并标记 Rpc BeanProxies。作为项目发展的一部分,您发现需要向对象添加额外的字段。如果您使用使用数据属性而不是对象的接口(interface),您将不断更改它们,并且方法签名变得笨拙且不可读。

但是,某些人要求将持久域实体与业务域分开。在这种情况下,可以使用属性复制(apache commons-bean utils)。

关于java - 使用 GET 将数据对象从客户端传输到服务器以持久保存数据的方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7121435/

相关文章:

java - Jersey :找不到类的语法元素

java - JPA:具有复合主键的持久实体

java - 使 html 标签在 GWT 中可选择

java - 在测试之间重置 JPA 生成的值

java - GWT i18n 消息属性不显示像 ß 这样的特殊字符

java - commons-logging-1.1.jar;无法读取 zip 文件条目

java - 加密/解密java类并使用自定义类加载器在tomcat中实现和部署

Javascript 跨域请求到 Glassfish 4 服务器?

java - 将 Maven 构建生成的 SQL 脚本放在哪里?

hibernate ,如何按条件计数