使用@Convert按属性过滤条件

问题描述 投票:0回答:2

我有一个带有字符串列表的简单类,并且该列表使用@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 数据库

spring postgresql criteria hibernate-criteria
2个回答
4
投票

目前使用 Hibernate 是不可能的。

请参阅错误票:https://hibernate.atlassian.net/browse/HHH-9991


0
投票

解决方法:

@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。

© www.soinside.com 2019 - 2024. All rights reserved.