多对一关系出错

时间:2017-06-26 16:20:00

标签: google-app-engine jpa google-cloud-datastore

我的组织实体

@Entity
public class Organization implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;
private String name;
private String type;
private byte image;
@OneToMany(cascade=CascadeType.MERGE)
@JoinColumn(name="ORGANIZATION_ID") 
private List<User> admin;

我的用户实体

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;    
private String score;
private boolean online;
private String resume;
public Status status;
public enum Status {
    ACTIVE, INACTIVE, VERIFIED, NOT_VERIFIED , BANNED
};

@ManyToOne(cascade=CascadeType.MERGE)
@JoinColumn(name="ORGANIZATION_ID") 
private Organization organization;
@Persistent
private User_personal user_p;

public User_personal getUser_personal(){

    return user_p;
}

public void setUser_personal(User_personal user_p) {
    this.user_p = user_p;
}
@OneToMany(mappedBy = "user", cascade=CascadeType.MERGE)
private List<Project> projects;

我正确地获得了用户和项目之间的一对多关系但不适用于用户和组织(多个)。我收到这样的错误

 WARNING: /OrganizationServlet
 javax.persistence.PersistenceException: Detected attempt to establish 
 Organization(no-id-yet) as the parent of User(4793870697103360) but the 
 entity identified by User(4793870697103360) has already been persisted 
 without a parent.  A parent cannot be established or changed once an object 
 has been persisted.at...

 showing error at em.getTransaction().commit();.

我的servlet是

protected void doPost(HttpServletRequest request, HttpServletResponse 
    response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    HashMap<String,String> map = Request_to_map.getBody(request);       
    boolean validToken = JWT.parseJWT(request.getHeader("Access-token") 
   ,map.get("email"));
    JsonObject output = new JsonObject();
    List<User> organization_admin = new ArrayList<User>();
    if(validToken == true){
        EntityManager em;
        em = EMF.get().createEntityManager();
        String organizationName = map.get("name");
        String type = map.get("type");
        byte image = 0;
        if(map.get("image")!=null)
        {
            image = Byte.valueOf(map.get("image"));
        }
        String email = map.get("email");

 if(organizationName==null||type==null||email==null||map.get("image")==null)
        {
            throw new IllegalArgumentException("please fill required 
            details");
        }
        try{
            em.getTransaction().begin();
            User user = User.find(email, em);
            if(user!=null)
            {
                Organization.org_status status= org_status.ACTIVE;
                Organization organization = new 
                Organization(organizationName, type,image,status);
                user.setOrganization(organization);
                organization_admin  = organization.getAdmin();
                if(organization_admin  == null)
                {
                    organization_admin = new ArrayList<User>();
                }
                organization_admin .add(user);
                organization.setAdmin(organization_admin);          
                em.persist(organization);   
                em.persist(user);   
                output.addProperty("message", "done");
                em.getTransaction().commit();
            }
            else
                output.addProperty("message","No such User found.Please 
               check details provided");    
        }
        finally{
            if(em.getTransaction().isActive())
                em.getTransaction().rollback();
    //      em.close();
        }
    }
    else
        output.addProperty(Constants.MESSAGE,  
         Constants.TokenNotAuthenticated);

        response.setContentType("application/Json");
        response.getWriter().println(output);
}

任何人都可以帮我解决这个问题吗?创建用户时,我将ORGANIZATION_ID作为列,但不能创建组织实体。我不认为连接将被用作GAE不允许它。

0 个答案:

没有答案