HIbernate没有看到专栏

时间:2016-07-03 19:18:31

标签: java hibernate postgresql

我在PostgreSQL数据库中有下表:

CREATE TABLE users
(
id INTEGER PRIMARY KEY NOT NULL,
name VARCHAR(64) NOT NULL,
age INTEGER NOT NULL
);
CREATE UNIQUE INDEX users_name_uindex ON users (name);

以下Hibernate实体映射:

@Entity
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(generator="increment")
    @GenericGenerator(name="increment", strategy = "increment")
    private int id;

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

    @Column (name = "age")
    private int age;

    public User() {}
    // setters and getters
}

一个从表中获取所有用户的函数

@Repository
public class UserDAO {

    @PersistenceContext
    EntityManager em;

    public List<User> getAll() {
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<User> cq = cb.createQuery(User.class);
        Root<User> fromUser = cq.from(User.class);
        cq.select(fromUser);
        TypedQuery<User> tq = em.createQuery(cq);

        return tq.getResultList();
    }
}

当我运行此函数时,运行以下SQL(使用show_sql输出):

select
    user0_.id as id1_,
    user0_.age as age1_,
    user0_.name as name1_ 
from
    User user0_

发生以下错误:

WARN : org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 42703
ERROR: org.hibernate.util.JDBCExceptionReporter - ERROR: column user0_.id not exists

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

尝试针对您的数据库运行实际查询:

select user0_.id as id1_,
       user0_.age as age1_,
       user0_.name as name1_
  from User user0_

我认为,当您的表名为User时,您的Hibernate查询会尝试从users表中进行选择。

您可以通过向您的实体添加以下注释来解决此问题:

@Table(name = "USERS")