我有一个带有字符串列表的简单类,并且该列表使用@Convert转换为数据库中的一列,现在我正在尝试基于类型属性创建一个标准。
@Entity(name = "my_table")
public class MyTable implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
@Convert(converter = StringListConverter.class)
private List<String> type;
}
和标准:
c2.add(Restrictions.ilike("type", matchValue, MatchMode.ANYWHERE));
但是我遇到了这个例外:
org.springframework.orm.jpa.JpaSystemException: Error attempting to apply AttributeConverter; nested exception is javax.persistence.PersistenceException: Error attempting to apply AttributeConverter
*所有条目都有一个值,我使用 psql 数据库
目前使用 Hibernate 是不可能的。
解决方法:
@Column
@Convert(converter = LanguageVersionsConverter.class)
private LanguageVersions languages;
@Column(name = "languages", insertable = false, updatable = false)
private String languagesRaw;
@QueryExpression(fields = {"language"})
public <T> Predicate filterByLanguages(
QueryConditionExpression param, CriteriaBuilder cb, From<Course, T> from) {
var field = "languagesRaw";
var value = param.getValue();
switch (param.getOperator()) {
case EQUAL:
return cb.equal(from.get(field), value);
default:
return cb.like(from.get(field), "%" + value + "%");
}
}
定义另一个字段以使用 Criteria API。