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

Spring Boot R2DBC内部联接在某些字段中返回null

芮念
2023-03-14

使用Spring Boot R2DBC时,我面临这样一种情况,即使用包含INNER JOIN的@Query编写原始查询时,结果Flux中返回的所有行中的一些字段都有数据,但其他字段为空。然而,当直接从DB运行相同的查询时,所有字段都被填充,这是我所期望的。可能是什么问题?列名和POJO/Bean名称完全匹配,并且是camelCase的混合,在DB级别和代码中都是大写和小写。例如,在下面的SQL:

    @Query("SELECT" +
    " i.inboundID, " +
    " i.MSISDN," +
    " i.message," +
    " ms.shortDesc," +
    //... other columns
    " i.modifiedByUsername" +
    " FROM inbound i " +
    " JOIN messageStatuses ms on ms.statusCode = i.inboundStatus " +
    " JOIN conversation cm on i.conversationID = cm.conversationID " +
    //...some other SQL
    " LIMIT :limit OFFSET :offset ")
    Flux<MessageModel> findAllMessages(...)

并给出以下POJO:

//getter and setter methods omitted
public class MessageModel
{
    private Integer inboundID;
    private String MSISDN;
    private String message;
    private String shortDesc;
    ...
    private String modifiedByUsername;
}

... 通过R2DBC获取数据时,字段MSISDN和message是唯一包含数据的列,其他所有列都将为空。但是,当提取上述SQL并直接在数据库(MySQL)上执行时,所有列都将包含数据。知道为什么会这样吗?

共有1个答案

万英武
2023-03-14

我设法通过将@org.springframework.data.relational.core.mapping.列注释添加到Java模型类列名来解决它。所以现在我的POJO有这样的结构:

public class MessageModel
{
    @Column(value = "inboundID")
    private Integer inboundID;

    @Column(value = "MSISDN")
    private String MSISDN;

    @Column(value = "message")
    private String message;

    @Column(value = "shortDesc")
    private String shortDesc;
    ...

    @Column(value = "modifiedByUsername")
    private String modifiedByUsername;
}
 类似资料:
  • 运行查询后,我从MongoDB返回一个JSON值。问题是我不想返回与我的返回相关的所有JSON,我尝试搜索文档,但没有找到正确的方法。我想知道如果可能的话会怎样,如果可能的话,正确的做法是什么。示例:在数据库中 如果某个字段为用户存在,但不返回另一个字段,那么返回该字段的正确方式是什么。对于上面的示例,我想返回RMS的字段和扎克伯格的字段。这就是我试图找到的字段是否为空,但它似乎不起作用。

  • 问题内容: 我正在使用Elasticsearch索引我的文档。 是否有可能指示它仅返回特定字段,而不是它存储的整个json文档? 问题答案: 是的 使用源过滤器。如果您使用JSON搜索,它将看起来像这样: 在ES 2.4及更低版本中,您还可以在search API中 使用fields选项: ES 5+中已弃用此功能。而且,源过滤器更强大!

  • 我正在尝试从查询中获取剩余的元组。在本例中,course_id3和4来自courses,因为用户admin@没有使用这些(他们只使用了1和2)。当我尝试左联接时,表已经很好地联接了,查询也正常工作... 但这将返回课程1和2,而不是3和4

  • 问题内容: 当每个表只有340行时,以下查询将返回> 7000行。 为什么会这样?如果INNER JOIN仅在两个表中都有匹配项时才返回一行,那么为什么要为匹配项返回多行。 问题答案: 如果有一个以上的行具有相同的价值为相同的价值,那么你会得到重复的行,反之亦然。

  • 我想创建带有PagerView的片段,但运行以下代码会返回一个IllegalStateException: 源代码: IllegalStateException: 进程:com.company.user.blabla,pid:22256 java.lang.illegalstate异常:带有适配器的ViewPager com.company.user.blabla.fragments.homeFr

  • 问题内容: “foo” instanceof String //=> false “foo” instanceof Object //=> false true instanceof Boolean //=> false true instanceof Object //=> false false instanceof Boolean //=> false false instanceof Ob