【问题标题】:Hibernate/JPA - Insert a field only if exists in tableHibernate/JPA - 仅当表中存在时才插入字段
【发布时间】: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 中添加这个新字段时,都需要更改应用程序

标签: java hibernate jpa orm


【解决方案1】:

我对这种情况感到非常困惑 - 您的系统中的组件解耦似乎存在更深层次的问题。

不过,您可以在数据库中添加列,但不需要在休眠实体中声明该字段。另一方面,您无法在休眠实体中拥有可选字段。一个字段要么被映射,要么没有被映射。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多