1

私はHibernateを使用したJPAとともにStruts2を使用したプロジェクトに取り組んでいます。

ユーザー (id、email) と顧客 (user_id) の 2 つのエンティティがあります。すべての Customer が User であると考えるのは自然なことなので、Customer Inherit をユーザーから取得しました。エンティティの関連コードは次のとおりです。

ユーザー:

@Entity
@Table(name = "user")
@Inheritance(strategy = InheritanceType.JOINED)
public class User implements Serializable {
    @Id
    @GeneratedValue
    private int id;
    private String email;
    ...getters and setters...
}

お客様

@PrimaryKeyJoinColumn(name = "user_id",referencedColumnName = "id")
@NamedQueries({
@NamedQuery(name = "Customer.getByCustomerUserId", query = "SELECT C FROM Customer C where C.id=:id")
})
public class Customer extends User implements Serializable {
}

クエリCustomer.getByCustomerUserIdを実行すると、エラーが発生し続けます。

「where句」の不明な列「customer0_.id」

Id フィールドを持つ BaseEntity を作成し、そこから User Entity を継承させることで、ここでの回答に従ってみましたが、効果はありません。このエラー メッセージは引き続き表示されます。何が問題なのか教えてください。

4

2 に答える 2

2

customer テーブルに user テーブルへの参照がないか、制約に似たような問題があると思われます。エンティティ クラスの名前を変更し、Hibernate にそれらからテーブルを生成させることをお勧めします。次に、新しいエンティティに対してクエリを使用します。問題がなければ、新しいテーブルと既存のテーブルの違いを調べる必要があります (一部の DB ツールで [テーブル スクリプトの作成] オプションを使用します)。

于 2013-10-29T09:15:35.230 に答える
0

primaryKeyJoinColumn ステートメントを削除します。

次に @ForeignKey(name="CHOOSE_A_NAME") を挿入します。ddl を生成して実行します (制約付き)

デフォルトでは、継承メカニズムは superClass で定義された Pk を使用します (彼の名前は何でも) ENjoy

于 2015-02-01T16:36:59.097 に答える