Как я могу получить строки базы данных в 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() + " " +
                "========================================= = ");
    }
  }
}

Результат выглядит следующим образом Как я могу получить строки базы данных в Pojo без использования генерации кода JOOQ?

Я вижу, что SQL-запрос работает нормально и перечисляет все совпавшие строки, но pojo возвращает нулевые значения. Что я здесь делаю не так? Может кто-нибудь указать мне правильное направление? Я был бы очень признателен за любую помощь.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
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

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