我在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
有谁知道为什么会这样?
答案 0 :(得分:0)
尝试针对您的数据库运行实际查询:
select user0_.id as id1_,
user0_.age as age1_,
user0_.name as name1_
from User user0_
我认为,当您的表名为User
时,您的Hibernate查询会尝试从users
表中进行选择。
您可以通过向您的实体添加以下注释来解决此问题:
@Table(name = "USERS")