java - org.postgresql.util.PSQLException : ERROR: column user0_. id 不存在 - hibernate

标签 java postgresql hibernate jpa entity

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

@Entity
@Table(name="USER")
public class User {

    @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")
    private Timestamp 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();

我得到一个异常(exception):

org.postgresql.util.PSQLException: ERROR: column user0_.id does not exist

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

database

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

最佳答案

解决方案

PostgreSQL 中,您必须像这样指定架构的名称:

@Table(name="table_name", schema = "myapp")
                          ^^^^^^^^^^^^^^^^

长篇大论

你遇到了这个错误:

org.postgresql.util.PSQLException: ERROR: column user0_.id does not exist

因为当你在 PostgreSQL 中创建数据库时,它会创建一个名为 public 的默认架构,所以当你没有在 Entity< 中指定名称时 然后 Hibernate 会自动检查 public 架构。


良好做法

  1. databaseschematablescolumns的名称中不要使用大写字母<强>PostgreSQL。否则,您应该使用引号转义此名称,这可能会导致语法错误,因此您可以使用:

@Table(name="table_name", schema = "schema_name")
             ^^^^^^^^^^             ^^^^^^^^^^^
  1. 关键字USERPostgreSQL中的保留关键字take a look at

+----------+-----------+----------+-----------+---------+
| Key Word |PostgreSQL |SQL:2003  | SQL:1999  | SQL-92  |
+----------+-----------+----------+-----------+---------+
|  ....        ....       ....       ....       ....    |
+----------+-----------+----------+-----------+---------+
| USER     |  reserved |reserved  | reserved  | reserved|
+----------+-----------+----------+-----------+---------+
  1. DtoEntity 之间的区别是在您的实体名称末尾使用实体,例如 UserEntity<

关于java - org.postgresql.util.PSQLException : ERROR: column user0_. id 不存在 - hibernate ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45782327/

相关文章:

java - 什么是 VB.Net 中相当于 Now.ToString ("yyyy-MM-dd") 的较短 Java 代码?

Java 8 : How can I convert a for loop to run in parallel?

postgresql - Spark 写入 Postgresql。批量更新异常?

postgresql - MASK=CONTAINS 时 SDO_CONTAINS 和 SDO_RELATE 之间的区别?

java - 实体图上的 JPA 更改事件 [EclipseLink]

java - 如何使用where子句更新Spring Data JPA中的表

java - 如何创建可扩展的表单?

postgresql - 如何从 Python 获取 PostgreSQL 数据库大小?

Hibernate 条件按外键过滤

java - 尽管身份验证成功,但 RequestListener 中的 request.getUserPrincipal() 为 null