非主要なキー値と共同可能なオレトマニー
-
27-10-2019 - |
質問
Java EEのFacebookの壁を複製しようとしています。
ユーザー、投稿、壁の3つのテーブルがあります。
ユーザーにはユーザー名(PK)と他のフィールドがあり、POSTにはID(PK)、著者(ユーザーのFK)、その他があります。ウォールは、ポストとユーザーの間の結合テーブルです。
ポイントは、プロジェクトがPKとしてポストとユーザーの両方を壁に持っている場合にのみコンパイルされることです。 PKを使用すると、PKとユーザーがあります。非ヌル値が機能しないように!
しかし、両方がPKとしてあることは@Manytomanyにつながります。つまり、同じ投稿が多くの壁にある可能性があります。
壁に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 [class entity.post]の関係属性[ユーザー]のターゲットエンティティを決定することはできません。ジェネリックを使用していない場合は、ターゲットエンティティが関係マッピングで定義されていることを確認してください。
私のマッピングの何が問題になっていますか?
解決
ユーザーとポストの2つの関係はどうですか、1つは壁用、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;
}
所属していません StackOverflow