微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JDBI 3:嵌套 SQLObject

如何解决JDBI 3:嵌套 SQLObject

我尝试使用 jdbi 3 收集存储在连接表中的复合对象。实体 event 1 -> n author 是数据结构的一个例子。它们通过保存在事件列中的 author_id 连接。

通过 join 可以轻松查询它们,但我无法使用 jdbi 的给定注释创建对象。你能告诉我我在使用 jdbi 时的错误,并给我机会用 jdbi 处理“复杂”的对象吗?

DAO 代码

    @sqlQuery("SELECT e.id as e_id,e.name as e_name,e.start_time as e_start_time,e.lastupdated as e_lastupdated,a.id as a_id,a.name as a_name,a.mail_address as a_mail_address FROM event e INNER JOIN author a ON(e.author_id = a.id) WHERE e.id = :event_id")
    @RegisterBeanMapper(value = Event.class,prefix = "e")
    @RegisterBeanMapper(value = Author.class,prefix = "a")
    List<Event> getFeedbackByEventId(@Bind("author_id") int authorId,@Bind("event_id") int eventId);

Event.java

@Data
public class Event {
    private int id;

    @NonNull
    private String name;

    private LocalDateTime startTime;

    private LocalDateTime lastUpdated;

    @NonNull
    @nested("a")
    private Author author;

    private Feedback Feedback;

    private List<Valuedindicator> valuedindicators;
}

作者.java

public class Author {
    private static final Logger LOGGER = LoggerFactory.getLogger(Author.class);

    private int id;

    @NonNull
    private String name;

    @NonNull
    private String mailAddress;
}
Result
[
  {
    "id": 1,"name": "Testveranstaltung","startTime": "1970-01-01T01:16:40","lastUpdated": "2021-01-14T17:15:09","author": null,"Feedback": null,"valuedindicators": null
  }
]

如您所见,作者为空。所以我猜@nested 注释没有正确使用。

解决方法

在这种情况下,@Nested 应该不带 ("a") 使用。那行得通。

Event.java

@Data
public class Event {
    private int id;

    @NonNull
    private String name;

    private LocalDateTime startTime;

    private LocalDateTime lastUpdated;


    @Nested
    private Author author;

    private Feedback feedback;

    private List<ValuedIndicator> valuedIndicators;
}

DAO

    @SqlQuery("SELECT e.id as e_id,e.name as e_name,e.start_time as e_start_time,e.lastupdated as e_lastupdated,a.id as a_id,a.name as a_name,a.mail_address as a_mail_address FROM event e INNER JOIN author a ON(e.author_id = a.id) WHERE e.id = :event_id")
    @RegisterBeanMapper(value = Event.class,prefix = "e")
    @RegisterBeanMapper(value = Author.class,prefix = "a")
    List<Event> getFeedbackByEventId(@Bind("author_id") int authorId,@Bind("event_id") int eventId);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。