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

