關於postgresql報 ERROR: XXX does not exist

postgresql是區分大小寫的sql

受限標識符或被引號修飾的標識符。它是由雙引號(")包圍的一個任意字符序列。一個受限標識符老是一個標識符而不會是一個關鍵字。所以"select"能夠用於引用一個名爲「select」的列或者表,而一個沒有引號修飾的select則會被看成一個關鍵詞,從而在本應使用表或列名的地方引發解析錯誤。在上例中使用受限標識符的例子以下:UPDATE "my_table" SET "a" = 5;shell

在PostgreSQL關係型數據庫中存在關鍵字的使用的問題,例如user 作表名,create table user (id int, name,varchar(20));建立的時候須要給表名user加上雙引號"user";數據庫

我有一個使用hibernate映射到postgres數據庫的模型類。個人模型類是:bash



  @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」檢索用戶使用如下查詢:session



  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數據庫以下所示:app





hibernate如何將類屬性映射到表列?它是否僅基於 @Column(name =「username」)匹配,仍是根據數據類型和約束(例如惟一/自動增量)嘗試匹配?post

 

解決方法
 

解釋



它給你這個錯誤:this



  org.postgresql.util.PSQLException:錯誤:列user0_.id不存在



由於當你建立一個數據庫PostgreSQL時,它會建立一個名爲 public 的默認模式,因此當你沒有在實體中指定名稱,它將在公共模式中自動檢查,由於您收到此錯誤。hibernate



另外一件事確認模式名稱是正確的,錯誤說:



 列user0_.id不存在



而不是:



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



確認查詢使用公共架構而不是真正的架構myapp






解決方案



要解決此問題,您必須指定架構名稱,以下所示:



  @Table(name =「USER」,schema =「myapp」)






建議



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



  @Table(name =「user」,schema =「myapp」)
外加Navicat破解過程https://www.jianshu.com/p/749b3f78039b
相關文章
相關標籤/搜索