Возможность подключения к Postgres через Hibernate, но не может получить данные путем выполнения запросов - PullRequest
1 голос
/ 17 июня 2019

У меня есть док-контейнер, работающий с базой данных postgres. Контейнер также создает базу данных, таблицу и некоторые тестовые данные. У меня также есть приложение спящего режима с весенней загрузкой, которое может подключаться к БД. Однако я не могу выполнить какие-либо запросы и получить какие-либо данные.

Я проверил, чтобы убедиться, что я подключен к правильному БД, изменив значения в моем файле application.properties на имя БД, которое не существует - приложение Java работает, когда я возвращаюсь к правильному имени БД.

Я также указал spring.jpa.show-sql = true в моем файле application.properties, это выводит команду sql. Когда я запускаю это вручную на postgres, он возвращает данные.

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
@RestController
public class HelloController {

    @Autowired
    private AccountService accountService;

    @RequestMapping("/hi/{id}")
    public String hi(@PathVariable("id") int index) {
        return "Hi " + accountService.get(index).getName();
    }

    @RequestMapping("/all")
    public List<String> hey() {
        List<String> everyOne = new ArrayList<>();
        for (Account account : accountService.list()) {
            everyOne.add(account.getName());
        }
        return everyOne;
    }
}
@Service
public class AccountService {

    @Autowired
    private AccountRepository accountRepository;

    public List<Account> list() {
       return accountRepository.findAll();
    }

    public Account get(int index) {
        return accountRepository.getOne(index);
    }

}
@Repository
public interface AccountRepository extends JpaRepository<Account, Integer> {

}
@Entity
public class Account {

    @Id
    private int id;
    private String name;

    public Account() { }

    public Account(int id, String name) {
        super();
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return this.id;
    }

    public String getName() {
        return this.name;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }
}
spring.datasource.url=jdbc:postgresql://localhost:5432/db
spring.datasource.username= postgres
spring.datasource.password=
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto = update
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation = true
spring.jpa.show-sql = true

Пока приложение работает, если я сверну http://localhost:8080/all,, я бы ожидал, что будут возвращены все данные в таблице Account.

Когда я скручиваюсь http://localhost:8080/hi/2, я получаю сообщение об ошибке, говорящее

'avax.persistence.EntityNotFoundException: невозможно найти com.something.models.Account с идентификатором 2 '

Так как я могу подключаться к БД через режим гибернации и получать данные при ручном запуске команд sql, которые генерирует hibernate в командной строке psql, я уверен, что здесь просто упущено что-то простое. Любая помощь здесь будет принята с благодарностью.

1 Ответ

1 голос
/ 18 июня 2019

Я выяснил причину, почему она не работала.Мое приложение работает нормально, а также док-контейнер, который запускал postgres.Проблема заключалась в том, что таблица учетных записей не была в postgres.

Причина, по которой это произошло, заключалась в том, что таблицы и операторы вставки не выполнялись на БД, которую я создал в postgres, а вместо этого создавали таблицы на БД по умолчанию (postgres).Я понял, что, когда я разбил сценарии sql в моем файле docker-compose.yml, для каждого файла .sql они работали, пока они подключались к базе данных 'postgres'.Вставив '\ c db' в каждый из моих сценариев, это решило все мои проблемы.

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