Spring JPA 实体类可以包含不在数据库表中的非数据库字段吗

jlp*_*jlp 2 java spring-data-jpa spring-data-rest spring-boot

我在 SpringBoot 中使用 Spring JPA 和 Spring Data Rest。我有一个名为 user 的数据库表和一个用于该表的实体。我没有这个应用程序的控制器。

@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;
} 
Run Code Online (Sandbox Code Playgroud)

现在,我需要再添加一个字段,它不是 USER 表中的一列。某些监视工具将使用它来进行跟踪。

@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
} 
Run Code Online (Sandbox Code Playgroud)

添加此字段后,我得到一个 jdbc.spi.SqlExceptionHelper - Invalid column name "tracer",这是有道理的,因为此类被注释为实体。我的问题是:有没有办法将非数据库字段添加到实体类中?我想不是,但想知道万一有人有解决方案。谢谢。

Fab*_*ira 8

是的,只需将注释添加@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

希望能帮助到你。