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