2012-01-05 3 views
2

JoinTable

を使用して、私はJava2EEを使用してさえずりのようなプロジェクトをやろうとしている、とここではデータベースの単純なビューです。
3つのJoinTableが、フォロワーとフォロワーです。 (言及注意、フォロワー、以下、すべてのユーザーフィールドが外部キーとしてUser.usernameを持っています。) 私は私のデプロイがこの例外に失敗する最初のものに問題、持っている:

を例外説明:[field mentions]要素にマッピングされた参照列名[username]がマッピング参照の有効なフィールドに対応していません。

ここで2つのエンティティのマッピングを示します。

ツイート:

public class Tweet implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @NotNull 
    @Column(name = "id", nullable = false) 
    private Integer id; 

    ... 

    @JoinColumn(name = "user", referencedColumnName = "username") 
    @ManyToOne 
    User user; 
    @JoinTable(name = "Mention", joinColumns = { 
     @JoinColumn(name = "tweet", referencedColumnName = "id")}, inverseJoinColumns = { 
     @JoinColumn(name = "mentioned", referencedColumnName = "username")}) 
    @OneToMany 
    private Collection<Tweet> mentions; 

ユーザー:

public class User implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @Basic(optional = false) 
    @NotNull 
    @Size(min = 1, max = 50) 
    @Column(name = "username", nullable = false, length = 50) 

    ... 

    @OneToMany(mappedBy = "user") 
    Collection<Tweet> tweets; 
    @JoinTable(name = "Following", joinColumns = { 
     @JoinColumn(name = "user", referencedColumnName = "username")}, inverseJoinColumns = { 
     @JoinColumn(name = "following", referencedColumnName = "username")}) 
    @OneToMany 
    Collection<User> following; 
    @JoinTable(name = "Followers", joinColumns = { 
     @JoinColumn(name = "user", referencedColumnName = "username")}, inverseJoinColumns = { 
     @JoinColumn(name = "follower", referencedColumnName = "username")}) 
    @OneToMany 
    Collection<User> followers; 
    @OneToMany(mappedBy = "mentions") 
    Collection<Tweet> mentioning; 

私のマッピングが悪いのか? 誰かが私に解決策を教えてもらえますか?

+0

であなたを残してユーザーのlectionは、おそらく、マッピングとは無関係です注釈を削除するには、あなたのいいだろう、私はこのコードの多くは、質問とは無関係だと思うと –

+0

が固定:-)などのインデントを修正します。私はUserクラスにいくつかのマッピングを残しました。間違っているかもしれないからです:) – StepTNT

+0

'Mention.mentioned'は' User.username'によって参照されるべきです。 'の後ろに' username'フィールドはありませんが、このマッピングで動作します。これは 'Mention'の場合と全く同じです – StepTNT

答えて

0

私はあなたが、基本的にメッセージがあなたのtweet表はusernameそれ外部キーフィールドを持っていないことを言っているユーザテーブルに

@JoinColumn(name = "mentioned", referencedColumnName = "user") 

を指定する

@JoinColumn(name = "mentioned", referencedColumnName = "username") 

を変更することがあると思いますuser

この - >private Collection<Tweet> mentions;は、1から多くのcol

@OneToMany 
@JoinTable(
    name = "Mention", 
    joinColumns = { 
     @JoinColumn(name = "tweet", referencedColumnName = "id") 
    }, 
    inverseJoinColumns = { 
     @JoinColumn(name = "mentioned", referencedColumnName = "user") 
    } 
)  
private Collection<User> mentions; 
+0

' referencedColumnName = "user" 'で既に試しましたが、エラーは同じです! あなたが言った最初のオプションを理解していません – StepTNT

+0

2番目のものを使用すると前と同じエラーが発生します:/ 最初のもので、このメッセージが表示されます: 'Exception Description:互換性のないマッピングが見つかりました。 [class entity.User]および[class entity.Tweet]。これは通常、マッピングのカーディナリティがバックポインタのカーディナリティに対応していない場合に発生します。 – StepTNT

+0

最初に述べた方法を無視して、 'referenceColumnName'と' Collection 'を両方ともユーザー –

関連する問題