Jakarta ee JPA可以';t将用户实体添加到要持久化的项目实体

Jakarta ee JPA可以';t将用户实体添加到要持久化的项目实体,jakarta-ee,jpa,netbeans,jax-rs,Jakarta Ee,Jpa,Netbeans,Jax Rs,我在将用户添加到要持久化的项目实体的用户集合时遇到问题。在我的数据库中,一个项目有许多用户,一个用户可以有许多项目 @POST @Consumes({"application/xml", "application/json"}) public void create(Project entity) { User user = em.find(User.class, 1); Collection<User> users = new Ar

我在将用户添加到要持久化的项目实体的用户集合时遇到问题。在我的数据库中,一个项目有许多用户,一个用户可以有许多项目

@POST
    @Consumes({"application/xml", "application/json"})
    public void create(Project entity) {
        User user =  em.find(User.class, 1);
        Collection<User> users = new ArrayList<User>();
        users.add(user);
        entity.setUserCollection(users); //This does not works
        entity.setCreatedDate(new Date());
        entity.setStatus(1);
        getEntityManager().persist(entity); //super.create(entity);
    }
@POST
@使用({“application/xml”、“application/json”})
公共作废创建(项目实体){
User=em.find(User.class,1);
集合用户=新建ArrayList();
用户。添加(用户);
entity.setUserCollection(users);//这不起作用
entity.setCreatedDate(新日期());
实体。设置状态(1);
getEntityManager().persist(实体);//super.create(实体);
}
我该怎么做

我的项目实体具有此映射

    @ManyToMany(mappedBy = "projectCollection")
    private Collection<User> userCollection;
@ManyToMany(mappedBy=“projectCollection”)
私人收藏用户收藏;
而我的用户实体有这些

    @JoinTable(name = "user_has_project", joinColumns = {
    @JoinColumn(name = "User_idUser", referencedColumnName = "idUser")}, inverseJoinColumns = {
    @JoinColumn(name = "Project_idProject", referencedColumnName = "idProject")})
    @ManyToMany
    private Collection<Project> projectCollection;
    @ManyToMany(mappedBy = "userCollection")
    private Collection<Project> ProjectCollection;
@JoinTable(name=“user\u has\u project”,joinColumns={
@JoinColumn(name=“User\u idUser”,referencedColumnName=“idUser”)},inverseJoinColumns={
@JoinColumn(name=“Project\u idProject”,referencedColumnName=“idProject”)})
@许多
私人收藏;
@ManyToMany(mappedBy=“userCollection”)
私人收藏;

我的数据库结构就像你的映射没有任何意义

第一:

private Collection<Project> projectCollection;
private Collection<Project> ProjectCollection;

据我所知,你不可能在许多物体的两面绘制地图。关系的管理方也需要维护关系。因此,可以添加和删除集合的部分

尝试在用户对象中更改此选项

 @JoinTable(name = "user_has_project", joinColumns = {
@JoinColumn(name = "User_idUser", referencedColumnName = "idUser")}, inverseJoinColumns = {
@JoinColumn(name = "Project_idProject", referencedColumnName = "idProject")})
@ManyToMany
private Collection<Project> projectCollection;
@ManyToMany(mappedBy = "userCollection")
private Collection<Project> ProjectCollection;
@JoinTable(name=“user\u has\u project”,joinColumns={
@JoinColumn(name=“User\u idUser”,referencedColumnName=“idUser”)},inverseJoinColumns={
@JoinColumn(name=“Project\u idProject”,referencedColumnName=“idProject”)})
@许多
私人收藏;
@ManyToMany(mappedBy=“userCollection”)
私人收藏;

@ManyToMany(mappedBy=“userCollection”)
私人收藏;
还有项目实体

@JoinTable(name = "user_has_project", joinColumns = {
@JoinColumn(name = "Project_idProject", referencedColumnName = "idProject")
    }, inverseJoinColumns = {
@JoinColumn(name = "User_idUser", referencedColumnName = "idUser")    
})
@ManyToMany
private Collection<User> userCollection;
@JoinTable(name=“user\u has\u project”,joinColumns={
@JoinColumn(name=“Project\u idProject”,referencedColumnName=“idProject”)
},反向连接列={
@JoinColumn(name=“User\u idUser”,referencedColumnName=“idUser”)
})
@许多
私人收藏用户收藏;

有关完整示例,请参见定义“不起作用”。它不进入数据库,我有一个表作为
user\u has\u project
user id,项目id应该进入它。您发布的内容不足以诊断问题。我们不知道您的实体是如何映射的,也不知道super.create(entity)做了什么。添加了更多详细信息:)这仍然没有告诉我实体是如何定义和映射的,以及super.create()做了什么。发布代码:这就是问题所在。图片很少有bug。你的答案很有启发性。:)我不明白为什么从用户到项目有两种不同的关联:/re-factoring可能不好。这可能是原因吗?我不知道我应该去掉哪一个。我是个新手。我尝试了上面的代码,现在它似乎是正确的连接,当我查询用户的项目,它显示了新添加的项目。但它不会进入数据库。它似乎只停留在ram中。也删除了不必要的关联,现在它正在工作!:D非常感谢你!
    User user =  em.find(User.class, 1);
    Collection<User> users = new ArrayList<User>();
    users.add(user);
    entity.setUserCollection(users); // useful to maintain coherence, but ignored by JPA
    entity.setCreatedDate(new Date());
    entity.setStatus(1);
    getEntityManager().persist(entity);

    user.getProjectCollection().add(entity); // necessary to have the association persisted
 @JoinTable(name = "user_has_project", joinColumns = {
@JoinColumn(name = "User_idUser", referencedColumnName = "idUser")}, inverseJoinColumns = {
@JoinColumn(name = "Project_idProject", referencedColumnName = "idProject")})
@ManyToMany
private Collection<Project> projectCollection;
@ManyToMany(mappedBy = "userCollection")
private Collection<Project> ProjectCollection;
@ManyToMany(mappedBy = "userCollection")
private Collection<Project> projectCollection;
@JoinTable(name = "user_has_project", joinColumns = {
@JoinColumn(name = "Project_idProject", referencedColumnName = "idProject")
    }, inverseJoinColumns = {
@JoinColumn(name = "User_idUser", referencedColumnName = "idUser")    
})
@ManyToMany
private Collection<User> userCollection;