Как исправить ошибку JPA / Hibernate, не можете найти информацию о таблице? - PullRequest
0 голосов
/ 30 сентября 2019

Я подключил свою базу данных к основному Java-приложению с помощью JPA / Hibernate. Я могу добавлять / удалять элементы из моей таблицы Microsoft SQL через мой загрузочный проект Spring. Хотя, когда приходит время просмотреть все в моей таблице, я получаю сообщение об ошибке. Ниже я добавил еще немного кода, связанного с проектом.

Класс сущности:


import javax.persistence.*;

@Entity
@Table(name = "taddm")
public class AVSApplication {

    @Id
    @Column(name = "appcode")
    private String mAppCode;

    @Column(name = "acro")
    private String mAcronym;

    @Column(name = "appname")
    private String mAppName;


    //Constructor
    public AVSApplication(String mAppCode, String mAcronym, String mAppName) {
        super();
        this.mAppCode = mAppCode;
        this.mAcronym = mAcronym;
        this.mAppName = mAppName;
    }


    //Default Constructor
    public AVSApplication () {

    }


    //Getters
    public String getmAppCode() {
        return mAppCode;
    }

    public String getmAcronym() {
        return mAcronym;
    }
    public String getmAppName() {
        return mAppName;
    }



    //Setters
    public void setmAcronym(String mAcronym) {
        this.mAcronym = mAcronym;
    }
    public void setmAppCode(String mAppCode) {
        this.mAppCode = mAppCode;
    }

    public void setmAppName(String mAppName) {
        this.mAppName = mAppName;
    }




}

Контроллер:

//Select
        @GetMapping("/select-me")
        public String selectApplication() {

            System.out.println(mAppRepo.findAll());
            System.out.println(mAppRepo.findById("3A0"));

           return "tier";
        }

Ошибка:

Hibernate: select avsapplica0_.appcode as appcode1_0_, avsapplica0_.acro as acro2_0_, avsapplica0_.appname as appname3_0_ from taddm avsapplica0_
[]
Hibernate: select avsapplica0_.appcode as appcode1_0_0_, avsapplica0_.acro as acro2_0_0_, avsapplica0_.appname as appname3_0_0_ from taddm avsapplica0_ where avsapplica0_.appcode=?
Optional.empty

Репо:

@Repository
public interface AppRepository extends JpaRepository<AVSApplication, String>{

     @Override
     List<AVSApplication> findAll();

}

Имена таблиц:

appcode (primary key)
acro
appname

Ответы [ 3 ]

0 голосов
/ 01 октября 2019

Вам не нужно override по умолчанию findAll() метод в JpaRepository. Просто оставьте интерфейс репозитория пустым.

@Repository
public interface AppRepository extends JpaRepository<AVSApplication, String>{

}
0 голосов
/ 01 октября 2019

Как вы показали, похоже, в вашем коде нет ошибки, он не нашел ничего с этим ключом findById("your_key"), и у вас нет значения для этого ключа. Что вы можете сделать, это проверить, если у вас есть значение для этого ключа, например, действовать следующим образом:

Optional<AVSApplication> optionalApp = mAppRepo.findById("3A0");
if (optionalApp.isPresent()) 
    {
        AVSApplication yourObject= optionalApp.get();
     } 
else 
    {
        //throw new exceptions or do whatever you want
    }

Кроме того, очистите ваш метод переопределения findAll() из вашего хранилища

0 голосов
/ 01 октября 2019

Я так и думал. Это НЕ ошибка. Действительный вывод на самом деле. Вы пытаетесь запросить (sysout) код приложения - "3A0", который не существует. Я попытался повторить то же самое на моем локальном компьютере, и я смог сделать это, запросив несуществующий код приложения, как в:

Неверный ввод:

System.out.println(mAppRepo.findAll());
System.out.println(mAppRepo.findById("appcode"));

вывод:

[com.example.demo.entity.AVSApplication@1640ad08]
Optional.empty

Допустимый ввод:

System.out.println(mAppRepo.findAll());
    System.out.println(mAppRepo.findById("abc"));

вывод:

[com.example.demo.entity.AVSApplication@335bed5b]
Optional[com.example.demo.entity.AVSApplication@655967a5]

Поэтому убедитесь, что вы запрашиваете существующие и действующие критерии. Найдите опечатки и попробуйте снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...