gpt4 book ai didi

java - 如何使用 java 类作为实体和模型

转载 作者:行者123 更新时间:2023-12-02 03:20:53 27 4
gpt4 key购买 nike

我有一个实体类“classA”和一个模型类“ClassA1”。 ClassA 用于将服务器端的值存储在 mysql 数据库中,ClassA1 用于将 API 响应字符串转换为客户端对象。

现在我有两个具有相同 getter 和 setter 的 java 类,但 ClassA 包含 hibernate 注释,而 ClassA1 只是一个 POJO。考虑以下类结构

ClassA.java

@Entity
@Table(name="classA")
public class ClassA {
@Id
private int id;
private String name;

public int getId() {
return id
}

public void setId(int id) {
this.id = id;
}

@Column(name="name")
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

ClassA1.java

public class ClassA1 {
private int id;
private String name;

public int getId() {
return id
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

我的应用程序包含更多数量的类,如上面的。我想避免这种情况,因为如果我向数据库添加任何列,目前我会在 ClassA 和 ClassA1 中添加 getter 和 setter。

有没有办法为服务器端和客户端模块使用单个类?

最佳答案

您可以简单地尝试在这两种情况下使用相同的类。它应该有效。这就是我在早期项目之一开始时尝试的方法。只要您能够仔细处理从客户端收到的 ClassA 的 JPA 合并,将其视为独立实体即可。

但是,当您的实体设计变得更加复杂时,您将面临很多问题(这就是我在项目中放弃这种方法的原因:P)。最大的问题之一是,假设您已经对实体关系进行了建模,一旦您尝试“序列化”它以供客户端使用,很多(JAXB 等,当时我正在做项目)解决方案将递归地跟踪所有的关系并尝试转换它。这种行为将触发大量实体的延迟获取,并使结果序列化形式包含大量(未使用的)数据。尽管您可以控制行为(通过添加某种忽略注释等),但结果实体将变得难以维护。

因此,恕我直言,你所做的并不是没有道理的。您需要注意的是,将值对象(您称为“模型”)视为“表示”。您不需要使其与您的实体严格相同。

利用/开发一些util库来处理从实体构造值对象,并将数据从值对象填充回实体。

当然,鉴于您还没有分享太多关于您的架构的信息,该建议可能不适用于您。

关于java - 如何使用 java 类作为实体和模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39635150/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com