2

Java2EE を使用して Twitter のようなプロジェクトを実行しようとしています。データベースの簡単なビューを次に示します。
Mention、Followers、Following は 3 つの JoinTable です。(前述の、follower、following、およびすべてのユーザー フィールドに外部キーとして User.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;

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

4

1 に答える 1

0

私はあなたが変わらなければならないと思います

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

ユーザーテーブルを指定する

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

基本的に、メッセージは、tweetテーブルに外部キーフィールドusernameがないことを示しているため、呼び出したとおりではありませんuser

これは->private Collection<Tweet> mentions;また、あなたを去るユーザーの1対多のコレクションである必要があります

@OneToMany
@JoinTable(
    name = "Mention", 
    joinColumns = {
        @JoinColumn(name = "tweet", referencedColumnName = "id")
    }, 
    inverseJoinColumns = {
        @JoinColumn(name = "mentioned", referencedColumnName = "user")
    }
)    
private Collection<User> mentions;
于 2012-01-05T16:12:21.353 に答える