提问人:Mojtaba jalambadani 提问时间:11/10/2023 更新时间:11/10/2023 访问量:29
Spring Boot中枚举修改后如何自动更新Hibernate Check Constraint?
How to Update Hibernate Check Constraint Automatically After Enum Modification in Spring Boot?
问:
我有一个使用 Hibernate 的 Spring Boot 应用程序,我最近在其中向实体类 BlockItemEntity 中使用的枚举 ContactTypeConstant 添加了新值。该实体映射到 PostgreSQL 数据库。
下面是实体和枚举的简化版本:
BlockItemEntity:
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "block_item", schema = "public")
public class BlockItemEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected long id;
@Column(length = 256)
private String title;
@Enumerated(EnumType.STRING)
private ContactTypeConstant contactType;
}
ContactTypeConstant:
@RequiredArgsConstructor
@Getter
public enum ContactTypeConstant {
EMAIL(10, "email"),
PHONE(20, "phone");
private final long id;
private final String title;
}
最初,创建数据库约束时未考虑其他枚举值:
ALTER TABLE block_item
ADD CONSTRAINT block_item_contact_type_check
CHECK ((contact_type)::text = ANY
((ARRAY ['EMAIL'::character varying, 'PHONE'::character varying])::text[]));
后来,我在 ContactTypeConstant 中引入了新的枚举值“MOBILE”和“SMS”。当 Hibernate 尝试使用这些更新的枚举值插入新的 BlockItemEntity 时,我遇到了一个约束冲突错误:
ERROR: new row for relation "block_item" violates check constraint "block_item_contact_type_check"
有没有办法让 Hibernate 根据修改后的枚举值自动更新 check 约束?如果没有,使用 Hibernate 和 Spring Boot 处理数据库中此类枚举更改的推荐方法是什么?
我探索了使用删除和重新创建表,更新 check 约束以包含新的枚举值。虽然我最初希望 Hibernate 能够自动处理此类更新。ALTER TABLE
答: 暂无答案
评论