1

私のシステムの一部のユーザーについてレビューしたいのですが、このレビューは他のユーザーによって行われます。これが私のユーザーのテーブルです。

ユーザーテーブル

そしてこれは私のuser_reviewテーブルです:

ユーザーレビューテーブル

EclipseLinkは次のように生成されます(実際には、この投稿のために変更されたので@PrimaryJoinColumnはありません):@JoinColumn

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;

    @Temporal(TemporalType.DATE)
    private Date date;

    private String review;

    //bi-directional many-to-one association to User
//  @PrimaryKeyJoinColumn(name="id_user_reviewer")
    @ManyToOne 
    @JoinColumn(name="id_user_reviewer")
    private User reviewer;

    //bi-directional many-to-one association to User
//  @JoinColumn(name="id_user")
    @ManyToOne 
    @PrimaryKeyJoinColumn(name="id_user")
    private User user;

    //bi-directional many-to-one association to UserInfo
    @ManyToOne
    @JoinColumn(name="id_user")
    private UserInfo userInfo; 

そして私にこのエラーを与え続けます:

Join column "user_id" cannot be resolved on table "user_review"

私はすでに多くのこと、さまざまな関連付けを試していますが、何も機能していないようです。何か案は ?

4

3 に答える 3

1

これは最も奇妙なことです..しかし、私は次の行を削除します:

//  @JoinColumn(name="id_user")

そして、Eclipseはもう警告しません..(これまでのところ=])私はこのスレッドを開いたままにします'これは非常に奇妙なことであり、このように解決すると本当に思います。

アップデート

ブライアンの指示どおりにやりましたが、問題は解決したようです。

@Entity
@Table(name="user_review")
public class UserReview implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    private Integer id;

    @Temporal(TemporalType.DATE)
    private Date date;

    private String review;

    //bi-directional many-to-one association to User
    @ManyToOne
    @JoinColumn(name="id_user_reviewer", insertable=false, updatable=false)
    private User user1;

    //bi-directional many-to-one association to User
    @ManyToOne
    @JoinColumn(name="id_user")
    private User user2;

    //bi-directional many-to-one association to UserInfo
    @ManyToOne
    @JoinColumn(name="id_user", insertable=false, updatable=false)
    private UserInfo userInfo;
        .. more code
于 2013-03-06T23:08:15.390 に答える
1

うーん-あなたの要約:

JPAでの複数の書き込み可能なマッピング?

あなたの質問と思われるものと一致しません:

このエラーが発生するのはなぜですか:結合列「user_id」はテーブル「user_review」で解決できませんか?

@JoinColumnしたがって、userフィールドでaを指定すると、「複数の書き込み可能...」の問題が発生すると思います。フィールドにを指定すると、「...解決できません...」という問題が発生し@PrimaryKeyJoinColumnますuser

@PrimaryKeyJoinColumn@ManyToOneマッピングには使用できません。(エンティティが主キーを共有する場合のマッピングで使用でき@OneToOneます。)その結果、EclipseはJPA仕様(である"user_id")で定義されたデフォルトの結合列名を計算します。その列はuser_reviewテーブルにないため、データベーステーブルでフィールドを解決できないことを示すエラーメッセージが表示されます。

フィールドのコメントを外す必要があり@JoinColumnますuser。その結果、データベースの列に@OneToMany書き込まれる外部キーを決定する2つのマッピングが作成されます。これは、フィールドによって参照されるか、フィールドによって参照されるかのいずれかの主キーの値を取ります。これは許可されていません。データベースリレーションまたはオブジェクトモデルを作り直すか、マッピングの1つに読み取り専用()のマークを付ける必要があります。id_userUseruserUserInfouserInfo@JoinColumn(name="id_user", insertable = false, updatable = false)

于 2013-03-07T23:57:53.333 に答える
-1

コードと投稿したエラーメッセージの間に不一致があるようです。エラーメッセージは、コード内の「user_id」という名前の列について文句を言っていますが、@JoinColumnアノテーションは「id_user」を使用しています。

それは正しくないようですが、ある時点で例外をコピーしてからコードを変更した可能性がありますか?

于 2013-03-06T11:22:27.583 に答える