Birthright Birthright - 1 year ago 167
Java Question

Spring Data JPA query doesn't work, column does not exists

I use spring data jpa in my web-app, i have entity user

public class User implements Serializable {
private static final long serialVersionUID = 1L;

private Long id;
private String password;
private String email;
private Boolean enabled;
private String name;
private String lastname;
private String userRole;

public User() {

public User(String password, String email, Boolean enabled, String name, String lastname, String userRole) {
this.password = password; = email;
this.enabled = enabled; = name;
this.lastname = lastname;
this.userRole = userRole;

@GeneratedValue(strategy = GenerationType.AUTO, generator = "users_id_seq")
@SequenceGenerator(name="users_id_seq", sequenceName="users_id_seq", allocationSize = 1)
@Column(name = "id", nullable = false)
public Long getId() {
return id;

//Other columns

And i have UserRepository interface which extends CrudRepository.
When i call method findAll in my Controller, I get this error

01-May-2016 22:45:58.674 WARN [http-nio-8080-exec-3] org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logExceptions SQL Error: 0, SQLState: 42703
01-May-2016 22:45:58.675 ERROR [http-nio-8080-exec-3] org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logExceptions Error: column does not exist
Position: 8

My spring-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""
xmlns:xsi="" xmlns:tx=""


<jpa:repositories base-package="com.birthright.repository"/>

<bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.birthright.entity"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
<property name="jpaProperties">
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQL9Dialect</prop>
<prop key="">update</prop>


<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.postgresql.Driver"/>
<property name="url" value="jdbc:postgresql://localhost:5432/AutoService"/>
<property name="username" value="postgres"/>
<property name="password" value="root"/>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="myEmf"/>


My table in postgresql

CREATE TABLE public."user"
id integer NOT NULL DEFAULT nextval('users_id_seq'::regclass),
password character varying,
email character varying,
enabled boolean,
name character varying,
lastname character varying,
user_role character varying,

Answer Source

User is a reserved keyword in PostgreSQL. With a default naming strategy you, probably, had User table name.

Don't know why @Table(name = "user", schema = "public") works. Maybe PostgreSQL doesn't consider public.user as a keyword opposite User.

Please use plural names for tables. And using a system or subsystem prefix for a table name (xxx_users) is a good idea too.

A naming strategy can be used for such approach. Refer this as an example: Hibernate5NamingStrategy

An example of prefixes: StrategyOptions

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download