Соответствие полей в 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 шт):
все будет зависеть от способа од того как вы захотите добавлять данные в базу данных, например: у вас есть репозиторий для вашего 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 и не больше того