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

标签 java hibernate java-8 pojo spring-4

我有一个实体类“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/

相关文章:

java - 为什么我的 switch 语句会出现这种奇怪的行为?

java - spring + hibernate配置错误?类路径资源 [spring.xml] 中的 XML 文档无效

java - 使用 Stream.reduce 求逆和不正确

java - 由 : java. sql.SQLException : ORA-01795: maximum number of expressions in a list is 1000? 引起

java - 在应用 Hibernate @Filter 时如何通过 ID 获取实体?

java - jdk1.8 GLIBC 依赖问题

java - 如何对 hashmap 列表使用流过滤器? ArrayList<HashMap<字符串,对象>>

java - ec2+tomcat+mysql 拒绝访问!

java - Java中声明二进制数的 "meta"是什么?

java - 在 JDateChooser 中显示数据库中的日期