Как я могу получить строки базы данных в pojo без использования генерации кода jooq?

Я пытаюсь использовать JOOQ без генерации кода. У меня есть класс дао, который выглядит так

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 возвращает нулевые значения. Что я здесь делаю не так? Может кто-нибудь указать мне правильное направление? Я был бы очень признателен за любую помощь.

1
0
354
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не уверен, является ли это ошибка или особенность. Вы используете простой API шаблонов SQL, тогда как вам, вероятно, следует использовать API построения идентификатора. Когда ты пишешь

field("tiedosto.id")

Затем jOOQ (возможно, ошибочно) считает, что ваш столбец называется `tiedosto.id` с точкой в ​​имени. Когда его действительно следует квалифицировать как `tiedosto`.`id`. Есть несколько возможных исправлений:

Продолжайте использовать простой API-интерфейс шаблонов SQL

Но тогда не уточняйте имя:

field("id")

Используйте API построения идентификаторов

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

Используйте генератор кода

Конечно, это всегда должно быть вашим предпочтительным вариантом.

Большое спасибо за ваш ответ. Удаление имени таблицы помогло. Я обычно и в основном предпочитаю генератор кода, я просто пытался немного поиграться с jooq.

Roshan Upreti 31.10.2018 13:18

Другие вопросы по теме