关于postgresql报 ERROR: XXX does not exist

postgresql是区分大小写的

受限标识符或被引号修饰的标识符。它是由双引号(")包围的一个任意字符序列。一个受限标识符总是一个标识符而不会是一个关键字。因此"select"可以用于引用一个名为“select”的列或者表,而一个没有引号修饰的select则会被当作一个关键词,从而在本应使用表或列名的地方引起解析错误。在上例中使用受限标识符的例子如下:UPDATE "my_table" SET "a" = 5;

在PostgreSQL关系型数据库中存在关键字的使用的问题,例如user 做表名,create table user (id int, name,varchar(20));创建的时候需要给表名user加上双引号"user";

我有一个使用hibernate映射到postgres数据库的模型类。我的模型类是:



  @Entity 
@Table(name =“USER”)
public class用户{

@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”)
私有时间戳已创建;

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:错误:列user0_.id不存在



我的bash shell数据库如下所示:





hibernate如何将类属性映射到表列?它是否仅基于 @Column(name =“username”)匹配,还是根据数据类型和约束(例如唯一/自动增量)尝试匹配?

解决方法
 

解释



它给你这个错误:



  org.postgresql.util.PSQLException:错误:列user0_.id不存在



因为当你创建一个数据库PostgreSQL时,它会创建一个名为 public 的默认模式,所以当你没有在实体中指定名称,它将在公共模式中自动检查,因为您收到此错误。



另一件事确认模式名称是正确的,错误说:



 列user0_.id不存在



而不是:



 列myapp.user0_.id不存在
------- ^ ---- ^



确认查询使用公共架构而不是真正的架构myapp






解决方案



要解决此问题,您必须指定架构名称,如下所示:



  @Table(name =“USER”,schema =“myapp”)






建议



不要在PostgreSQL中使用表格或列名称中的大写字母。



  @Table(name =“user”,schema =“myapp”)
外加Navicat破解过程https://www.jianshu.com/p/749b3f78039b
原文地址:https://www.cnblogs.com/Treesir/p/11492254.html