jdbi/jdbi

Mapping bean class didn't find any matching columns in result set when mapping to JoinRow

Open

#2,289 创建于 2023年3月5日

在 GitHub 查看
 (5 评论) (0 反应) (0 负责人)Java (1,745 star) (324 fork)batch import
answeredhelp wantednot a bug

描述

I have SQL schema and Java class for issue and ticket model defined as follow:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Ticket {

    private long id;
    private int ticket_int_1;
    private int ticket_int_2;
    private int ticket_int_3;
    private String ticket_varchar_1;
    private String dateFiled;
    private String dateLastUpdated;
    private String dateResolved;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@ToString

public class Issue {
    private long id;
    private long issue_bigInt_1;
    private long issue_bigInt_2;
    private int issue_int_1;
    @EqualsAndHashCode.Include
    private long issue_bigInt_3;
    private int issue_int_2;
    @EqualsAndHashCode.Include
    private int issue_int_3;
    @EqualsAndHashCode.Include
    private String issue_varchar_1;
    @EqualsAndHashCode.Include
    private String issue_varchar_2;
    @EqualsAndHashCode.Include
    private String issue_varchar_3;
    private int issue_int_4;
    private String dateResolved;
    private String dateCreated;
    private String dateUpdate;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class TicketIssue {
    private long id;
    private int ticket_issue_int_1;
    private long issueId; // issue will be the many
    private long ticketId;  // ticket will be the 1
}

According to the official doc, I wrote the following code:

String selectSql = "SELECT t.*, i.* FROM " + ISSUE_TABLE + " as i"
        + " JOIN " + TICKET_ISSUES_TABLE + " as ti on i.id = ti.issue_id"
        + " JOIN " + TICKET_TABLE + " as t on ti.ticket_id = t.id";

jdbi.useHandle(handle -> 
        handle.registerRowMapper(BeanMapper.factory(Ticket.class, "t"))
        .registerRowMapper(BeanMapper.factory(Issue.class, "i"))
        .registerRowMapper(JoinRowMapper.forTypes(Ticket.class, Issue.class))
        .createQuery(selectSql)
        .mapTo(JoinRow.class));

Executing above query throws an error:

java.lang.IllegalArgumentException: Mapping bean class Ticket didn't find any matching columns in result set

My implementation looks exactly the same with the documentation, what went wrong here? Can anyone help?

贡献者指南

Mapping bean class didn't find any matching columns in result set when mapping to JoinRow · jdbi/jdbi#2289 | Good First Issue