传递给持久对象的独立实体:model.Company [英] detached entity passed to persist: model.Company

查看:102
本文介绍了传递给持久对象的独立实体:model.Company的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将分离的实体传递给persist:model.我使用@OneToMany映射时的公司.我尝试了不同的方法,但结果相同. 我添加了@OneToMany和CascadeTypes Persist等.删除那些. 设置管理员并尝试保留,评论管理员组并尝试保留.他们都没有工作.

I'm getting the detached entity passed to persist: model. Company when I use @OneToMany mapping. I tried different method but the same result. I added @OneToMany with CascadeTypes Persist and all. Remove those. Set the manager and tried to persist, commented the set of manager and tried to persist. None of them worked.

公司:

@Entity
public class Company {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    private int id;

    private int age;

    @ElementCollection
    private Set<Manager> managers;

    private String name;


    public int getId() {
        return this.id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setManagers(Set<Manager> managers) {
        this.managers = managers;
    }


    public Set<Manager> getManager() {
        return managers;
    }

}

经理

@Entity
public class Manager {

    @Id
    @GeneratedValue
    private int id;

    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

测试

public class Test {
    public static void main(String args[]) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpatestproject");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();

    //  Manager m1 = new Manager();
    //  m1.setName("abc");
    //  Manager m2 = new Manager();
    //  m2.setName("def");
    //  Set<Manager> managers = new HashSet();
    //  managers.add(m1);
    //  managers.add(m2);
    //  

        Company company = new Company();
        company.setId(1);
        company.setName("LTE");
    //  company.setManagers(managers);


        tx.begin();

        em.persist(company);
        tx.commit();
        System.out.println("Done");
    }
}

推荐答案

您正在使用company.setId(1);手动设置公司ID.

You are setting the Company id manually with company.setId(1);.

A @GeneratedValue最好一个人呆着.

A @GeneratedValue is best left alone.

持久性上下文将假定记录已存在,但由于设置了ID但实体不在当前的持久性上下文(由当前的EntityManager表示)中,因此已被分离.

The persistence context will assume the record already exists but is detached since the id is set but the entity is not in the current persistence context (represented by the current EntityManager).

这篇关于传递给持久对象的独立实体:model.Company的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆