【问题标题】:Matching fields in Entity and in liquibase实体和 liquibase 中的匹配字段
【发布时间】:2021-12-28 05:09:11
【问题描述】:

我正在研究一个培训项目 - 使用数据库。似乎有人说他是一名工人。目前还无法完全提升该项目。 这是实体的类描述。

@Entity
@Table(name = "inventories", schema = "inventories")
public class Inventory {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "part_num_oem")
    private String partNumOEM;
    @Column(name = "part_num")
    private String partNum;
    @Column(name = "part_name")
    private String partName;
    private String version;
    private Integer year;
    @Column(name = "image_exists")
    private Boolean imageExists;
}

这是创建表本身的 liquibase 文件

<changeSet id="create_inventories" author="adam">
    <createTable tableName="inventories" schemaName="inventories">
        <column name="id" type="BIGINT" autoIncrement="true">
            <constraints primaryKey="true" nullable="false"/>
        </column>
        <column name="part_num_oem" type="VARCHAR(100)"/>
        <column name="part_num" type="VARCHAR(100)"/>
        <column name="part_name" type="VARCHAR(255)">
            <constraints nullable="false"/>
        </column>
        <column name="version" type="VARCHAR(50)"/>
        <column name="year" type="INT"/>
    </createTable>
</changeSet>

此文件中的实体描述类中没有 image_exists 字段。 这不是一个错误吗? 或者有可能做到这一点吗? 这种情况下在数据库中添加新实体时不会弹出错误?

Entity Entity 文件不应该与 liquibase 文件完全匹配吗?

【问题讨论】:

  • 绝对是一个错误 - 来自现实生活中发生的错误。当尝试访问该实体时,JPA 提供者最终会在运行时发现。您可能会在部署时使用(特定于 Hibernate)&lt;property name="hibernate.hbm2ddl.auto" value="validate"/&gt; 之类的东西来警告您。可以编写某种包含 Liquibase 脚本的集成测试。我自己的example

标签: java liquibase


【解决方案1】:

可能存在更改inventories 表并在其中添加额外列的更改集。例如Inventory类的初始版本不包含image_exists字段,但它是后来添加的。由于 Liquibase 计算变更集的哈希值,因此建议添加额外的 altering 变更集,而不是修改原始的。

因此,如果以后有类似以下的更改列表,您很可能不会遇到任何麻烦:

<changeSet id="add_image_exists_column_to_inventories" author="someone" > 
    <addColumn tableName="inventories">
        <column name="image_exists" type="boolean"/>   
    </addColumn>  
</changeSet>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多