我有一个使用休眠映射到 postgres 数据库的模型类。我的模型类是:
@Entity
@Table(name="USER")
public class User {
@Id
@GeneratedValue
@Column(name="id")
private long id;
@Column(name="username", unique=true)
private String username;
@Column(name="email")
private String email;
@Column(name="created")
private Timestamp created;
public User(long id, String username, String email) {
this.id = id;
this.username = username;
this.email = email;
}
}
我尝试使用以下查询检索用户名为“adam”的用户:
tx = session.beginTransaction();
TypedQuery<User> query = session.createQuery("FROM User u WHERE u.username = :username", User.class).setParameter("username", "adam");
user = query.getSingleResult();
我得到一个例外说:
org.postgresql.util.PSQLException: ERROR: column user0_.id does not exist
我来自 bash shell 的数据库如下所示:
hibernate 如何将类属性映射到表列?它是仅基于 @Column(name="username")
进行匹配,还是也尝试基于数据类型和约束(例如唯一/自动递增)进行匹配?
原文由 kovac 发布,翻译遵循 CC BY-SA 4.0 许可协议
解决方案
在 PostgreSQL 中,您必须像这样指定架构名称:
很长的故事
你得到这个错误:
因为当您在 PostgreSQL 中创建数据库时,它会创建一个名为 public 的默认模式,因此当您未在
Entity
中指定名称时,Hibernate 将自动检查 公共 模式。良好做法
database
,schema
,tables
orcolumns
in PostgreSQL .否则你应该用引号来转义这个名字,这会导致语法错误,所以你可以使用:UserEntity