当前位置: 首页 > 知识库问答 >
问题:

如何修复Spring启动中的本机查询中的转换错误

倪风史
2023-03-14

我将此查询编写为否定查询并向数据库询问选择语句,但我没有收到列表中的数据

public interface NoteRepository extends JpaRepository<PrivateNote, Long> {

    @Query(nativeQuery = true, value =
            "SELECT p.mCategory " +
            "FROM privatenote as p " +
            "WHERE p.userId = :userId AND p.sharing = :sharing " +
            "GROUP BY p.mCategory"
        )
    List<MCateogry> findGroupBymCategory(@Param("userId") Long userId, @Param("sharing") 
    boolean sharing);   

}

发生了以下错误

org.springframework.core.convert.ConverterNotFoundException:找不到能够从类型[org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap]转换为类型[com.daehwan.notebook.model.PrivateNote]的转换器

这里是实体

@Data
@NoArgsConstructor
@AllArgsConstructor
public class MCategory{
    
    private String mCategory;   
    
}
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PrivateNote {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(nullable = false, length = 100)
    private String title;
    
    @JsonProperty("m_category")
    @Column(nullable = false, length = 30)
    private String mCategory;
    
    @JsonProperty("s_category")
    @Column(nullable = false, length = 30)
    private String sCategory;
    
    @Lob
    private String content;
    
    @Column(nullable = false)
    private boolean sharing;
    
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "userId")
    private User user;
    
    @CreationTimestamp
    private Timestamp createDate;
    
    private Timestamp updateDate;
}

如何更改以接收数据?

共有2个答案

谭裕
2023-03-14

我认为您应该通过直接执行SQL查询来检查它是否正确工作。

看起来您的查询结果是一个< code>String(而不是< code>MCategory),也许没有必要使用< code>group by

public interface NoteRepository extends JpaRepository<PrivateNote, Long> {

    @Query(nativeQuery = true, value =
            "SELECT p.mCategory " +
            "FROM privatenote as p " +
            "WHERE p.userId = :userId AND p.sharing = :sharing " +
            "GROUP BY p.mCategory"
        )
    List<String> findGroupBymCategory(@Param("userId") Long userId, @Param("sharing") 
boolean sharing);   
}
端木桐
2023-03-14
  1. 定义您的查询,如@NamedNativeQuery和结果集映射@SqlResultSetMaps。它指定本机SQL查询或存储过程的结果的映射。此外,@ConstructorResult应在@SqlResultSetMaps的上下文中使用,用于将结果映射到非实体POJO对象
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@NamedNativeQuery(name ="Category", 
                  query =
                         "SELECT p.m_category" +
                         "FROM privatenote as p " +
                         "WHERE p.userId = :userId AND p.sharing = :sharing " +
                         "GROUP BY p.m_category", 
                   resultSetMapping = "CategoryMapping"
)
@SqlResultSetMapping(name="CategoryMapping",
        classes = {
                @ConstructorResult(targetClass = MCateogry.class,
                        columns = {@ColumnResult(name = "m_category")
                 })
})
public class PrivateNote {
    ...
}
@Repository
public interface PrivateNoteRepository extends JpaRepository<PrivateNote, Long> {

    @Query(name = "Category", nativeQuery = true)
    List<MCateogry> findGroupBymCategory(@Param("userId") Long userId, @Param("sharing") boolean sharing);

}
 类似资料:
  • 我有一个用hibernate持久化的带有DateTime属性的实体 对于常规的spring-data-jpa生成的查询来说,这一切都很好。 我正在尝试添加自定义本机查询 我得到的错误是当试图调用这个是 这与我在将自定义类型映射添加到实体之前使用常规spring-data Finder时得到的错误相同 如何使spring-data-jpa/hibernate使用参数到本机查询的自定义类型映射?

  • 当我运行npm start时,我看到错误。 我尝试过这个方法,但没有成功:https://techoverflow.net/2019/04/01/how-to-fix-npm-err-missing-script-start/ {“private”:true,“scripts”:{“dev”:“npm运行development”,“development”:“cross-env node_env=

  • 问题内容: 就像标题所说的那样,我对Eclipse JVM启动器有问题。昨晚,一切正常,据我所知,此后我的电脑上没有任何变化。但是,我今天早上醒来,发现当我在Eclipse中运行任何项目时,我都会收到此错误: 我已经验证了 Path 变量()的完整性,现在,您可能会注意到,我的jdk的版本为65。我的JRE和Java安装也是如此。我不明白为什么eclipse使用jre60。我还检查了首选项,并且也

  • 正如标题所说,我对EclipseJVM启动器有一个问题。昨晚,一切都很好,据我所知,从那时起,我的电脑就没有任何变化。然而,我今天早上醒来发现,当我在eclipse中运行任何项目时,我收到了以下错误: 我已经验证了Path变量的完整性()现在,您可能会注意到,我的jdk版本是65。我的JRE和java安装也是如此。我不明白eclipse为什么要使用jre 60。我还检查了首选项,并更改了jre版本

  • 我想在我的查询中调用一个函数。例如: 在我的myTableRepository中,我可以执行以下操作: 但向语句添加函数调用不起作用: 有没有办法让它在JPQL中工作? 我的错误:

  • 问题内容: 我有一个本机SQL查询,如下所示: 问题是,Hibernate的解释,,作为参数,并希望我们给值,, 但是我不想让Hibernate这样解释,所以我想逃避冒号。 怎么做 ? 问题答案: 在Hibernate中,转义以开头。但是在Java中,您还必须逃脱另一个。因此,所有内容都需要替换为。最后,您得到: