由于@Formula注解标记的实体字段不包含在结果集中,所以会抛出错误

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

有一个实体通过 @Formula 注释同时包含常规字段和计算字段。

@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "persons")
@AuditTable(value = "persons_AUD", schema = "history")
@Audited
public class Person implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name", nullable = false)
    private String name;

    @Column(name = "surname", nullable = false)
    private String surname;

    @Column(name = "middle_name")
    private String middleName;

    @Formula("CONCAT_WS( ' ', surname, name, middle_name ) ")
    @NotAudited
    private String fullName;
}

从 Spring Boot 2 迁移到 Spring Boot 3 后,执行自定义 Spring Data 请求时,开始抛出以下错误:

jakarta.servlet.ServletException:请求处理失败: org.springframework.dao.InvalidDataAccessResourceUsageException: 无法按名称查找列位置:fullName [Колонки fullName не найдено в этом ResultSet''е.] [n/a]; SQL [不适用]

但是,像 findAll() 这样的方法不会导致这样的错误。在迁移到Spring Boot 3之前,不会出现这个错误。请求方法本身如下所示:

@Query(value = " SELECT distinct p.* FROM persons p", nativeQuery = true)
List<Person> findBySomeCustomRequest();
java spring hibernate
1个回答
0
投票

该错误是由于在本机查询中未使用字段

fullName
导致的。这与无法按名称查找列位置:column1 [在此 ResultSet 中未找到列名column1]中的情况相同。从类中删除列或将其添加到本机查询中。

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