2016-05-09 3 views
0

У меня есть веб-приложение Java, и я пытаюсь получить список клиентов из базы данных Postgres с помощью сконфигурированного Hibernate. Насколько я могу судить, приложение действительно получает соединение, потому что я проверил метаданные из соединения, и я вижу все мои таблицы там, так что все в порядке. Проблема в том, что я не получаю никаких данных из таблицы.Hibernate подключается к Postgres db, но он не извлекает данные

Вот моя модель для клиента:

@Entity 
@Table(name="Client") 
public class Client implements Serializable { 

    @Id 
    @Column(name="id", nullable= false) 
    private Integer id; 

    @Column(name="age", nullable = false) 
    private Integer age; 

    @Column(name="numberofrentals", nullable = false) 
    private Integer numberofrentals; 

    @Column(name="name", nullable = false) 
    private String name; 

    @Column(name="address", nullable = false) 
    private String address; 

    public Client() { 
    } 

    public Client(Integer id, Integer age, Integer numberofrentals, String name, String address) { 

     this.id = id; 
     this.age = age; 
     this.numberofrentals = numberofrentals; 
     this.name = name; 
     this.address = address; 
    } 

    public Integer getId() { 

     return id; 
    } 

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

    public Integer getAge() { 
     return age; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public Integer getnumberofrentals() { 
     return numberofrentals; 
    } 

    public void setnumberofrentals(int numberofrentals) { 
     this.numberofrentals = numberofrentals; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getAddress() { 
     return address; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 

     Client client = (Client) o; 

     if (age != client.age) return false; 
     if (numberofrentals != client.numberofrentals) return false; 
     if (!id.equals(client.id)) return false; 
     if (!name.equals(client.name)) return false; 
     return address.equals(client.address); 

    } 

    @Override 
    public int hashCode() { 
     int result = id.hashCode(); 
     result = 31 * result + age; 
     result = 31 * result + numberofrentals; 
     result = 31 * result + name.hashCode(); 
     result = 31 * result + address.hashCode(); 
     return result; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 

    @Override 
    public String toString() { 
     return "Client{" + 
       "id=" + id + 
       ", age=" + age + 
       ", numberofrentals=" + numberofrentals + 
       ", name='" + name + '\'' + 
       ", address='" + address + '\'' + 
       '}'; 
    } 
} 

Вот код JPAConfiguration

@Configuration 
@EnableJpaRepositories("repository") 
@EnableTransactionManagement 
@EnableCaching 
public class JPAConfig { 

    // @Value("${db.jdbcURL}") 
    private String jdbcURL = "jdbc:postgresql://localhost:5432/Shop"; 

    // @Value("${db.user}") 
    private String user = "postgres"; 

    // @Value("${db.password}") 
    private String password = "*****"; 

    // @Value("${db.generateDDL}") 
    private Boolean generateDDL = true; 


    @Bean 
    public DataSource dataSource() { 
     PGPoolingDataSource dataSource = new PGPoolingDataSource(); 
     try { 
      dataSource.setUrl(jdbcURL); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
     dataSource.setUser(user); 
     dataSource.setPassword(password); 
     dataSource.setMaxConnections(4); 

     return dataSource; 
    } 

    @Bean 
    public EntityManagerFactory entityManagerFactory() { 
     HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
     vendorAdapter.setDatabase(Database.POSTGRESQL); 
     vendorAdapter.setGenerateDdl(generateDDL); 
     vendorAdapter.setShowSql(true); 

     LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); 
     factory.setJpaVendorAdapter(vendorAdapter); 
     factory.setPackagesToScan("model"); 
     factory.setDataSource(dataSource()); 
     factory.afterPropertiesSet(); 
     return factory.getObject(); 
    } 

    @Bean 
    public EntityManager entityManager() { 
     return entityManagerFactory().createEntityManager(); 
    } 

    @Bean 
    PlatformTransactionManager transactionManager() { 
     JpaTransactionManager manager = new JpaTransactionManager(); 
     manager.setEntityManagerFactory(entityManagerFactory()); 
     return manager; 
    } 

    @Bean 
    public HibernateExceptionTranslator hibernateExceptionTranslator() { 
     return new HibernateExceptionTranslator(); 
    } 

    @Bean 
    public CacheManager cacheManager() { 
     GuavaCacheManager guavaCacheManager = new GuavaCacheManager(); 
     guavaCacheManager.setCacheBuilder(CacheBuilder.newBuilder().expireAfterAccess(2, TimeUnit.HOURS)); 
     return guavaCacheManager; 
    } 
} 

я подключиться, но никаких данных из моей таблицы клиента, который имеет такие же самые поля: id (PK), возраст, numberofrentals, имя, адрес. Какие-нибудь идеи, что не так? Я использую findall() из JpaRepository. Я не понимаю, в чем проблема, все кажется правильным.

Если есть больше кода, я могу разместить больше.

Есть ли способ отладить это или выяснить, что не так, потому что до сих пор я мог получить только соединение и список таблиц, а остальная информация звучит в порядке? Любые идеи, что может быть неправильным?

+0

Распечатайте журналы SQL и попробуйте выполнить команды SQL в базе данных вручную. [как записывать sql-команды в spring-boot] (http://stackoverflow.com/questions/30118683/how-to-log-sql-statements-in-spring-boot). –

+0

Я думаю, вам понадобится диалект базы данных –

+0

Да, это больше проблема. Я использую postgres, и я не уверен, что сделает spirng boot. Я проверил соединение, хотя ... он есть. Он видит мои таблицы, он даже создает таблицу, если они не существуют. Он просто отказывается читать что-либо от них через Jpa – Mocktheduck

ответ

0

Когда hibernate создает таблицу, по какой-то причине она создает ее со всеми строчными буквами, и она также будет читать их. Я думал, что он обращается к регистро-чувствительным, поэтому я добавлял данные в неправильные таблицы таблиц, тогда как правильные остались всегда пустыми.

Смежные вопросы