繁体   English   中英

如何在不使用 JOOQ 代码生成的情况下获取 Pojo 中的数据库行?

[英]How can I fetch database rows in Pojo without using JOOQ code generation?

我正在尝试在没有代码生成的情况下使用 JOOQ。 我有一个看起来像这样的 dao 类

public class FilesDao { 
public List<FilePojo> getAllFiles() {
    DataSource dataSource = DataSourceFactory.getTestiDataSource();
    List<FilePojo> filePojos = new ArrayList<>();
    try (Connection con = dataSource.getConnection()) {
        DSLContext create = DSL.using(con, SQLDialect.MARIADB);
        filePojos = create.select(field("tiedosto.id"), field("tiedosto.nimi"), field("tiedosto.koko_tavua"),
                field("tiedosto.sisalto"), field("tiedosto.hlo_id"))
                .from(table("tiedosto"))
                .where(field("minioupload").eq((byte) 0))
                .fetch().into(FilePojo.class);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return filePojos;
   }
}

和一个看起来像这样的 Pojo 类

import javax.persistence.Column;
import javax.persistence.Table;

@Table(name="tiedosto")
public class FilePojo {

@Column(name = "id")
private Integer id;

@Column(name = "hlo_id")
private Integer customerId;

@Column(name = "koko_tavua")
private Integer fileSize;

@Column(name = "nimi")
private String fileName;

@Column(name = "sisalto")
private byte[] content;}
//Getters setters omitted

当我尝试使用这样的主要方法从表中读取时

public class App {
public static void main(String[] args) {
    FilesDao mydao = new FilesDao();
    List<FilePojo> myList = mydao.getAllFiles();
    for (FilePojo filePojo : myList) {
        System.out.println("==========================================" + "\n" +
                filePojo.getId() + " " +
                filePojo.getCustomerId() + " " +
                filePojo.getFileName() + " " +
                filePojo.getFileSize() + " " +
                filePojo.getContent() + " " +
                "==========================================");
    }
  }
}

输出如下在此处输入图片说明

我可以看到 SQL 查询运行良好并列出了所有匹配的行,但 pojo 返回空值。 我在这里做错了什么? 有人可以指出我正确的方向吗? 我真的很感激任何形式的帮助。

我不确定这是错误还是功能 当您可能应该使用标识符构建 API时,您正在使用纯 SQL 模板API 当你写

field("tiedosto.id")

然后,jOOQ(可能是错误的)认为您的列名为`tiedosto.id` ,名称中带有句点。 当它真的应该被限定为`tiedosto`.`id` 有几个可能的修复:

继续使用纯 SQL 模板 API

但是,不要限定名称:

field("id")

使用标识符构建 API

field(name("tiedosto", "id"))

使用代码生成器

当然,这应该始终是您的首选。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM