Соответствие полей в Entity и в liquibase

Изучаю учебный проект - работа с базами данных. Вроде как заявлено, что он рабочий. Поднять полностью проект еще не получилось. Вот класс описание сущности.

@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?


Ответы (1 шт):

Автор решения: denis Krivorutchko

все будет зависеть от способа од того как вы захотите добавлять данные в базу данных, например: у вас есть репозиторий для вашего Entity

public interface InventoryRepository extends JpaRepository<Inventory ,Long> {

}

и вы делаете например

inventoryRepository.save(new Inventory());

то я предположу что будет ошибка, Unknown column imageExists in 'field list'

но если например написать

@Modifying(clearAutomatically = true)
@Transactional
@Query(nativeQuery = true,value = "INSERT INTO  inventory (partNum) VALUES 
('someValue');")
void insertInventory();

то ошибки быть не должно, то есть разница только в том кто будет формировать запросы к таблице, а liquibase в вашем случае выступает в роли ddl и не больше того

→ Ссылка