Jakarta ee 具有非主键值的OneToMany JoinTable

Jakarta ee 具有非主键值的OneToMany JoinTable,jakarta-ee,many-to-many,one-to-many,many-to-one,jointable,Jakarta Ee,Many To Many,One To Many,Many To One,Jointable,我试图用JavaEE复制Facebook的墙 我有三张桌子: 用户、帖子、墙 用户有用户名(PK)和其他字段,Post有id(PK)、作者(用户上的FK)和其他字段。 墙是Post和用户之间的连接表 关键是,只有当我在墙上同时拥有post和user作为PK时,项目才会编译。 让Post具有PK和User作为非空值是行不通的 但将两者作为PK会导致@manytomy,这意味着同一帖子可以出现在许多墙上,这是不正确的 我尝试过在墙上发布PK,并使用以下映射: 职位: 用户: @ManyToOne 墙

我试图用JavaEE复制Facebook的墙

我有三张桌子: 用户、帖子、墙

用户有用户名(PK)和其他字段,Post有id(PK)、作者(用户上的FK)和其他字段。 墙是Post和用户之间的连接表

关键是,只有当我在墙上同时拥有post和user作为PK时,项目才会编译。 让Post具有PK和User作为非空值是行不通的

但将两者作为PK会导致@manytomy,这意味着同一帖子可以出现在许多墙上,这是不正确的

我尝试过在墙上发布PK,并使用以下映射:

职位:

用户:

@ManyToOne
墙上的私人收藏;
但它说:

无法确定类[class entity.Post]上关系属性[user]的目标实体。如果不使用泛型,请确保在关系映射上定义了目标实体


我的映射有什么问题吗?

两个用户关系如何,一个用于墙,一个用于作者:

  • 用户一对多发布(贴在用户墙上,没有连接表)
  • 用户一对多发布(帖子作者)
根据需要使用反向关系

例如:

@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;
}
@实体
公共类用户{
@OneToMany(mappedBy=“onWall”)
私人收藏墙;
//如果你不想要,你可以跳过这段关系
@OneToMany(mappedBy=“作者”)
私人收藏作者;
}
@实体
公营职位{
@许多酮
@JoinColumn(name=“wallOwnerId”)
个人用户上网;
@许多酮
@JoinColumn(name=“authord”)
私人用户作者;
}

两个用户关系如何,一个用于墙,一个用于作者:

  • 用户一对多发布(贴在用户墙上,没有连接表)
  • 用户一对多发布(帖子作者)
根据需要使用反向关系

例如:

@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;
}
@实体
公共类用户{
@OneToMany(mappedBy=“onWall”)
私人收藏墙;
//如果你不想要,你可以跳过这段关系
@OneToMany(mappedBy=“作者”)
私人收藏作者;
}
@实体
公营职位{
@许多酮
@JoinColumn(name=“wallOwnerId”)
个人用户上网;
@许多酮
@JoinColumn(name=“authord”)
私人用户作者;
}

我知道,但我认为墙不是一个普通的实体。我的意思是,墙必须将来自Post的数据与来自用户的数据连接起来,这就是为什么我认为它是一个连接表!难道没有办法按照我的问题去做吗?谢谢你的回复顺便说一句:)说得好还有一个问题……难道这不要求Post表中的新字段同时包含作者和所有者吗?@StepTNT肯定会的。它们是不同的关系,可能指向不同的用户实例。我的意思是,墙必须将来自Post的数据与来自用户的数据连接起来,这就是为什么我认为它是一个连接表!难道没有办法按照我的问题去做吗?谢谢你的回复顺便说一句:)说得好还有一个问题……难道这不要求Post表中的新字段同时包含作者和所有者吗?@StepTNT肯定会的。它们是不同的关系,可能指向不同的用户实例。
@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;
}