可以 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
希望对您有所帮助。
我正在使用 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
希望对您有所帮助。