可以 Spring JPA 实体 Class 包含不在数据库中的非数据库字段 Table

Can Spring JPA Entity Class Contain Non-DB Fields that Are not In a DB Table

我正在使用 Spring JPA 和 Spring Data Rest with SpringBoot。我有一个名为用户的数据库 table 和这个 table 的一个实体。我没有此应用程序的控制器。

@Entity
@Table(name = "USER")
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "USER_ID")
    private Integer userid;

    @Basic(optional = false)
    @Column(name = "USER_NAME")
    private String username;
} 

现在,我需要再添加一个字段,它不是 USER table 中的一列。它将被一些监控工具用于跟踪目的。

@Entity
@Table(name = "USER")
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "USER_ID")
    private Integer userid;

    @Basic(optional = false)
    @Column(name = "USER_NAME")
    private String username;

    private String tracer;  // this field is not in DB
} 

添加此字段后,我收到 jdbc.spi.SqlExceptionHelper - 无效的列名称 "tracer",这是有道理的,因为此 class 被注释为实体。我的问题是:有没有办法将非数据库字段添加到实体 class?我想不会,但想知道万一有人有解决方案。谢谢。

是的,只需在您的字段中添加注释 @Transient

您可以从 API 文档中阅读更多内容:

https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/Transient.html

此处(第 37.1.2.1 节):

https://docs.oracle.com/javaee/7/tutorial/persistence-intro001.htm#BNBQA

希望对您有所帮助。