hibernate 找不到SqlResultSetMapping

uidvcgyl  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(160)

我用的是spring Boot 3。我试图创建一个本地查询与实体管理器,我想饲料的dto

@SqlResultSetMapping(
        name = "BookResultMapping",
        classes = @ConstructorResult(
                targetClass = BookSearchResult.class,
                columns = {
                        @ColumnResult(name = "code"),
                        @ColumnResult(name = "title")}))
public class BookSearchService {

    @PersistenceContext
    private EntityManager entityManager;

    public void bookSearch(Search search){
         StringBuilder sbSqlQuery = new StringBuilder();
         ...
         Query query = entityManager.createNativeQuery(sbSqlQuery.toString(), "BookResultMapping");
         ...
    }
}

@Data
@RequiredArgsConstructor
public class BookSearchResult {

    private String code;
    private String title;
}

当我运行这个代码时,我得到
无法解析指定的结果集Map名称:BookResultMapping
编辑,我试图将与SqlResultSetMapping相关的代码直接添加到dto,但结果相同

zy1mlcev

zy1mlcev1#

看看这个答案:https://stackoverflow.com/a/36109273
简而言之,@SqlResultSetMapping注解应该放在一个@Entity类中,以便被检测到。我认为这是缺乏记录和在线的例子总是显示孤立的注解没有太多的上下文。
如果你想避免使用任何实体,你可以这样做:

@SqlResultSetMapping(
        name = "MessageDTO",
        classes = @ConstructorResult(targetClass = MessageDTO.class, columns = {
                @ColumnResult(name = "message_body", type = String.class),
                @ColumnResult(name = "created_date", type = OffsetDateTime.class)
        })
)
@Embeddable
public static class SQLMappingConfigEntity {
    /* this dummy Embeddable class allows SqlResultSetMapping annotation to be picked up */
}

在本例中,MessageDTO就是您的DTO。它必须有一个构造函数将所有参数。

相关问题