首页 > 解决方案 > 无法复制多对多关系中的实体

问题描述

我有一个实体类,它与另一个类具有多对多关系。我想通过更改其名称属性在此实例的表中创建一个新条目。

员工.java`

@Entity
@Table(name = "employee")
public class Employee {
    public Employee() {
        super();
    }

    public Employee(String name, List<Address> address) {
        super();
        this.name = name;
        this.setAddress(address);
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;
    @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.REMOVE,CascadeType.DETACH },fetch=FetchType.EAGER)
    @JoinTable(name = "employee_address", joinColumns = { @JoinColumn(name = "employee_id") }, inverseJoinColumns = {
            @JoinColumn(name = "address_id") })
    private List<Address> address;

    @OneToOne
    private Department department;

    public String getName() {
        return name;
    }

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

    public int getId() {
        return id;
    }

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

    public List<Address> getAddress() {
        return address;
    }

    public void setAddress(List<Address> address) {
        this.address = address;
    }

    public Department getDepartment() {
        return department;
    }

    public void setDepartment(Department department) {
        this.department = department;
    }
}

地址.java

@Entity
@Table(name = "Address")
public class Address {
    public Address() {
        super();
    }

    public Address(String address) {
        super();
        this.address = address;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String address;

    @ManyToMany(mappedBy = "address", cascade = CascadeType.REMOVE)
    private List<Employee> employee;

    public int getId() {
        return id;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

DataRetrivalServiceImpl.java

@Service
public class DataServiceImpl {
    @Autowired
    private EntityManager entityManager;
@Transactional
    public void copyEmpoyee() {
        Employee e = employeeRepo.findOneById(15);
        entityManager.detach(e);
        e.setId(0);
        e.setName("new Name");
        //employeeRepo.save(e);
        entityManager.persist(e);
    }

当我运行代码时,会在员工表中创建一个新条目,而不是在地址表中。谁能解释我在哪里做错了!

整个代码可以在 - https://github.com/iftekharkhan09/JPAHibernateProject找到

标签: hibernatejpamanytomanyfield

解决方案


推荐阅读