gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:56:29 24 4
gpt4 key购买 nike

我正在尝试使用 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() + " " +
"==========================================");
}
}
}

输出如下 enter image description here

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

最佳答案

我不确定这是否是 bug or a feature 。您正在使用plain SQL templating API当您可能应该使用identifier building API时。当你写的时候

field("tiedosto.id")

然后,jOOQ(可能是错误的)认为您的列名为 `tiedosto.id`,名称中带有句点。当它确实应该被限定为 `tiedosto`.`id` 时。有一些可能的修复方法:

继续使用纯 SQL 模板 API

但是,不要限定名称:

field("id")

使用标识符构建 API

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

使用代码生成器

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

关于java - 如何在不使用 JOOQ 代码生成的情况下获取 Pojo 中的数据库行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53081257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com