1

Java EE で Facebook の壁を複製しようとしています。

User、Post、Wall の 3 つのテーブルがあります。

ユーザーにはユーザー名(PK)とその他のフィールドがあり、投稿にはID(PK)、作成者(ユーザーのFK)などがあります。Wall は Post と User の間の結合テーブルです。

要点は、私が Wall に投稿とユーザーの両方を PK として持っている場合にのみ、プロジェクトがコンパイルされるということです。null 以外の値が機能しないのと同じように、Post に PK と User を持たせることはできません。

しかし、それらの両方を PK として持つと、@ManyToMany につながります。これは、同じ投稿が多くの Wall にある可能性があることを意味しますが、これは正しくありません!

私は壁に PK として投稿し、このマッピングを使用してみました:

役職:

@JoinTable(name = "Wall", joinColumns = {
    @JoinColumn(name = "id", referencedColumnName = "id")}, inverseJoinColumns = {
    @JoinColumn(name = "user", referencedColumnName = "username")})
@OneToMany
private User user;

ユーザー:

@ManyToOne
private Collection<Post> onWall;

しかし、それは言います:

クラス [class entity.Post] の関係属性 [user] のターゲット エンティティを特定できません。ジェネリックを使用しない場合は、ターゲット エンティティが関係マッピングで定義されていることを確認してください。

マッピングの何が問題になっていますか?

4

1 に答える 1

1

ユーザーから投稿への 2 つの関係についてはどうでしょうか。1 つはウォール用、もう 1 つは作成者用です。

  • ユーザーが一対多で投稿する (投稿がユーザーの壁に貼り付いている、テーブルに参加しない)、
  • 投稿するユーザー(投稿の作成者) と1 対多、

必要に応じて逆の関係で。

例えば:

@Entity
public class User {
    @OneToMany(mappedBy="onWall")
    private Collection<Post> wall;

    // You can skip this relationship, if you don't want it
    @OneToMany(mappedBy="author")
    private Collection<Post> authoredPosts;
}

@Entity
public class Post {
    @ManyToOne
    @JoinColumn(name="wallOwnerId")
    private User onWall;

    @ManyToOne
    @JoinColumn(name="authorId")
    private User author;
}
于 2012-01-11T22:06:43.527 に答える