【发布时间】:2019-10-25 06:48:22
【问题描述】:
我正在寻找答案是否可能在休眠状态下。我想要实现的是,如果一个字段存在于一个特定的表中,那么只有它应该插入它。否则,只需忽略 @Entity 类中的字段。
我希望这是因为将在我们正在使用的一个表中引入一个新字段,并且有许多相关组件现在将数据插入该表中。我不想要大爆炸。想要这样的东西不会影响旧版本以及升级发生时引入的新列也应该可以工作。
例如——
@Entity
@Table(name = "EMPLOYEE_RECORDS")
public class Employee
{
@Id
@Column(name = "employee_id")
private Integer employeeId;
@Column(name = "employee_name")
private String employeeName;
@Column(name="address")
private String address;
}
如果我只想在表EMPLOYEE_RECORDS中存在列(地址)时才将地址字段插入数据库怎么办。如果这很明显,请原谅我,因为我对 Hibernate 不是很精通。
另外让我解释一下我的想法(但不确定它是否也可以) -
1. 创建 2 个不同的 @Entity 类。尝试插入,如果插入失败,则在运行时切换 @Entity 并使用无地址。
2.通过简单查询检查表中是否存在字段,如果失败则使用@Entity而不使用地址,否则使用不使用地址。
【问题讨论】:
-
未用
@Transient注释的字段必须出现在表格中 -
所以也不可能保留 2 个 @Entity 类,其中一个类的字段不在表中,对吧?
-
实体字段可以少于表列,但不能像 @JsonIgnoreProperties(ignoreUnknown = true) 那样像 Json serialize 那样使用它。
-
@NIVESHSENGAR 所以你不能确定你会使用哪些表??
-
我确定,但我正在考虑让它面向未来并向后兼容。所以数据库的变化不会影响应用程序。现在我有一种感觉,每当在 DB 中添加这个新字段时,都需要更改应用程序