我有一个Enum类,它有一些值。 我们决定从代码中删除其中一个值及其所有实现。 我们不想删除DB中的任何记录。 我的Enum课程是这样的:
public enum CourseType {
VIDEO("CourseType.VIDEO"),
PDF("CourseType.PDF"),
QUIZ("CourseType.QUIZ"),
SURVEY("CourseType.SURVEY"),
POWERPOINT("CourseType.POWERPOINT") //*this one will be removed*
...
}
我的课程实体:
@Entity
@Table(name = "CRS")
public class Course {
@Column(name = "COURSE_TYPE")
@Enumerated(EnumType.STRING)
private CourseType courseType;
@Column(name = "AUTHOR")
private String author;
....
@Override
public CourseType getCourseType() {
return courseType;
}
@Override
public void setCourseType(CourseType courseType) {
this.courseType = courseType;
}
....
}
从Java Class中删除 Powerpoint 类型并尝试从DB中获取某些值后, 我收到了删除类型的映射错误。
我有这样的代码:
Course course = courseService.get(id);
如果我给了一个类型为' POWERPOINT'在数据库中, 该方法出现以下错误:
java.lang.IllegalArgumentException:未知名称值[POWERPOINT] for enum class [com.tst.enums.CourseType] at org.hibernate.type.EnumType $ NamedEnumValueMapper.fromName(EnumType.java:461) 在 org.hibernate.type.EnumType $ NamedEnumValueMapper.getValue(EnumType.java:449) 在org.hibernate.type.EnumType.nullSafeGet(EnumType.java:107)at org.hibernate.type.CustomType.nullSafeGet(CustomType.java:127)at at org.hibernate.type.AbstractType.hydrate(AbstractType.java:106)at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2912) 在org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1673)
当我尝试从DB检索查询结果时有没有办法, 如果记录'那么hibernate将无法获取。 course_type列与代码中的任何枚举值都不匹配? 我是否必须使用某种过滤器?
答案 0 :(得分:0)
您可以尝试使用注释@filter
@Filter(name = "myFilter", condition = "courseType <> 'CourseType.POWERPOINT'")
并启用它
session.enableFilter("myFilter")
答案 1 :(得分:0)
如果您不能使用过滤器, 类似下面的内容应该有效:
新课程类型枚举:
public enum CourseType
{
VIDEO("CourseType.VIDEO", false),
POWERPOINT("CourseType.POWERPOINT", true);
private boolean deletedFlag;
public CourseType(
existingParameter, // do whatever you are currently doing with this parameter.
deletedFlagValue)
{
// code to handle existing parameter.
deletedFlag = deletedFlagValue;
}