在使用 Spring 5.3.39 到 6.2.1、Spring Boot 从 2.7.18 到 3.4.1、Hibernate 从 5.6.15.Final 到 6.6.4.Final 以及 Derby 10.14.2.1 迁移应用程序时,我遇到了以下异常。
org.springframework.dao.InvalidDataAccessApiUsageException:org.hibernate.query.SemanticException:无法解释路径表达式“mycolumn”
处理方法调用 repo.findIdsByQuery("mycolumn = 'value'") 时发生异常,其中实体和存储库类声明如下。在版本升级之前,相同的方法调用可以正常工作。
当使用驼峰式大小写列名 repo.findIdsByQuery("myColumn = 'value'") 调用该方法时,它可以正常工作。有没有办法配置 Hibernate 以在查询中将列名视为不区分大小写?
实体:
@Entity
@Table(name = "MyEntities")
public class MyEntity implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String myColumn;
...
@Id
@Column(name = "IDX", nullable = false)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "MYCOLUMN")
public String getMyColumn() {
return myColumn;
}
public void setMyColumn(String myColumn) {
this.myColumn = myColumn;
}
...
}
JPA 存储库:
public interface MyEntitiesRepository extends JpaRepository<MyEntity, Long>, QueryItf {
...
class MyEntitiesRepositoryImpl implements QueryItf {
@Autowired
MyEntitiesRepository repo;
@PersistenceContext
EntityManager em;
@Override
@Transactional(readOnly = true)
public List<Long> findIdsByQuery(String query) {
TypedQuery<Long> typeQuery = em.createQuery("select id from MyEntities where " + query, Long.class);
return typeQuery.getResultList();
}
...
}