道类:
@Entity
@Table( name = "test" )
public class Test {
@ManyToOne
@JoinColumn( name = "college_id", referencedColumnName = "id" )
private College college;
@Enumerated( EnumType.STRING )
@Column( name = "gender", length = 500 )
private Gender gender;
@Enumerated( EnumType.STRING )
@Column( name = "section", length = 500 )
private Section section;
...
}
public enum Gender {
Male, Female;
}
public enum Section {
A(0), B(1), C(2);
}
存储库类:
List<Test> findByGender( Gender gender );
List<Test> findBySection( Section section );
如果我调用 findBySection(Section.A),它会按预期工作。
但是如果我调用 findByGender(Gender.MALE),它会抛出错误:
InvalidDataAccessAPIUsageException:枚举类 [com.java] 的未知名称值 []。 ...constants.Section]
奇怪的是,如果我打电话,findByCollegeAndGenderNot(College clg, Genderender) 它的工作原理。
最佳答案
我假设数据库中的列部分有空值。
要映射到 Java 枚举的数据库列可能不能为空。
因此您应该检查此项并添加默认值。
此外,您应该将列注释更改为:
@Enumerated( EnumType.STRING )
@Column( name = "gender", length = 500, nullable = false )
private Gender gender;
@Enumerated( EnumType.STRING )
@Column( name = "section", length = 500, nullable = false )
private Section section;
关于java - 具有多个枚举的枚举类的未知名称值 [],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54724204/