【问题标题】:Spring Boot R2DBC inner Join returns null in some fieldsSpring Boot R2DBC 内部 Join 在某些字段中返回 null
【发布时间】:2021-11-11 12:00:47
【问题描述】:

在使用 Spring Boot R2DBC 时,我面临这样一种情况,即使用 @Query 编写包含 INNER JOIN 的原始查询时,结果 Flux 返回的所有行中的一些字段有数据,但其他字段为空。然而,当直接从数据库运行相同的查询时,所有字段都被填写,这是我所期望的。可能是什么问题呢?列名和 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;
}

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

【问题讨论】:

    标签: mysql spring-data-r2dbc r2dbc r2dbc-mysql


    【解决方案1】:

    我设法通过在 Java 模型类列名称中添加 @org.springframework.data.relational.core.mapping.Column 注释来解决它。所以现在我的 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 2019-03-14
      • 2020-02-25
      • 1970-01-01
      相关资源
      最近更新 更多