web-dev-qa-db-ja.com

エラー:「ユーザー」またはその近くでの構文エラー

私はHibernateを使用しており、「User」という永続クラスがあります。これはキーワードなので、@ Entity属性を別の名前でマークしました(たとえば、この質問を見ました: postgresql hibernateで「user」という名前のテーブルを使用できません

ただし、このクラスが別のクラスを拡張しているため、まだ問題が発生しています。hibernateはまだ列名として「user」を使用しようとしていて、混乱しているようです。

@Entity( name = "XonamiUser" )
public class User extends PropertyContainer {
    ...

そして

@MappedSuperclass
public abstract class PropertyContainer implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    protected long key;
    /** tags */
    @ElementCollection
    protected Set<String> tags;

    @ElementCollection
    protected Set<String> searchList;
    ...

PropertyContainerを拡張する他のクラスは正常に機能しているようです。

これはHibernateのバグですか?このリファクタリングの不足を回避する方法はありますか?ありがとう!

これが私が見ているエラーです(少しクリーンアップされています):

WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 42601
ERROR org.hibernate.util.JDBCExceptionReporter - Batch entry 0 insert into user_search_list (user, search_list) values ('1', 'bjorn') was aborted.  Call getNextException to see the cause.
WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 42601
ERROR org.hibernate.util.JDBCExceptionReporter - ERROR: syntax error at or near "user"
  Position: 31
15
Bjorn Roche

最終的に、クラスユーザーをXonamiUserにリファクタリングしました。これは私が望んでいたことではありませんでしたが、うまくいきました。

2
Bjorn Roche

user予約済みキーワード PostgreSQLでは。 引用符で囲まれた識別子 としてのみ許可されます。

このINSERTコマンドでは、Hibernateに引用符で囲まれた"user"を使用するように強制する必要があります。

私はHibernateの専門家ではありませんが、おそらくこれ HibernateがユーザーモデルをPostgresに保存する は役に立ちますか?

43
filiprem

Userという名前の列またはテーブルを参照しているので少し混乱しています... @ Table -アノテーションを使用して、JPAでエンティティのテーブル名を設定できます。

@Entity
@Table(name = "XonamiUser")
public class User extends PropertyContainer {
3
esaj

Hibernateリファレンスマニュアル には、コレクションの要素を保持するために使用されるテーブル名を定義する方法を示す例があります。そして、たまたまUserエンティティを使用してこれを行い、列をuserではなくuser_idとして定義します。

あなたの場合、このマッピングは問題ないはずです:

@ElementCollection
@CollectionTable(name = "user_search_list", 
                 joinColumns = @JoinColumn(name = "user_id"))
@Column(name = "search_list")
protected Set<String> searchList;
1
JB Nizet