org.postgresql.util.PSQLException: エラー: 列 user0_.id が存在しません - Hibernate 質問する

org.postgresql.util.PSQLException: エラー: 列 user0_.id が存在しません - Hibernate 質問する

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();

次のような例外が発生します:

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

bash シェルからのデータベースは次のようになります:

データベース

Hibernate はクラス属性をテーブル列にどのようにマップしますか? のみに基づいて一致します@Column(name="username")か、それともデータ型や一意/自動増分などの制約に基づいて一致を試みますか?

ベストアンサー1

解決

PostgreSQLスキーマの名前を次のように指定する必要があります:

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

長い話

このエラーが発生しました:

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

なぜなら、データベースを作成するとPostgreSQL、デフォルトのスキーマを作成します。公共、で名前を指定しない場合は、EntityHibernateは自動的にチェックします。公共スキーマ。


良い習慣

  1. database、、またはの名前に大文字を使用しないでくださいschematablescolumnsPostgreSQLそれ以外の場合は、この名前を引用符でエスケープする必要がありますが、これにより構文エラーが発生する可能性があります。代わりに、次のように使用できます。

@Table(name="table_name", schema = "schema_name")
             ^^^^^^^^^^             ^^^^^^^^^^^
  1. キーワードユーザーは予約語ですPostgreSQL を見てみましょう

+----------+-----------+----------+-----------+---------+
| Key Word |PostgreSQL |SQL:2003  | SQL:1999  | SQL-92  |
+----------+-----------+----------+-----------+---------+
|  ....        ....       ....       ....       ....    |
+----------+-----------+----------+-----------+---------+
| USER     |  reserved |reserved  | reserved  | reserved|
+----------+-----------+----------+-----------+---------+
  1. の違いまでそして実在物エンティティ名の最後にEntityを使用することをお勧めします。例:UserEntity

おすすめ記事