關於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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM