Как я могу получить строки базы данных в Pojo без генерации кода JOOQ? - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь использовать 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 голосов
/ 31 октября 2018

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

field("tiedosto.id")

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

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

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

field("id")

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

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

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

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

...