无法删除实体(JPA和Spring)

无法删除实体(JPA和Spring),spring,jpa,Spring,Jpa,无论我尝试过什么,当我从userService类调用delete()时,我都无法删除用户实体。我得到一个异常java.lang.IllegalArgumentException:Entity必须被管理以调用remove:com.blackbox.genesis.entities。User@30168a,尝试合并分离的,然后再次尝试删除。我显然做错了什么——尽管合并了,但我看不出是什么。其他一切都很好-我可以创建和更新用户实体,没有任何问题 问候 我的实体类 @Entity @Table(uniq

无论我尝试过什么,当我从userService类调用delete()时,我都无法删除用户实体。我得到一个异常java.lang.IllegalArgumentException:Entity必须被管理以调用remove:com.blackbox.genesis.entities。User@30168a,尝试合并分离的,然后再次尝试删除。我显然做错了什么——尽管合并了,但我看不出是什么。其他一切都很好-我可以创建和更新用户实体,没有任何问题

问候

我的实体类

@Entity
@Table(uniqueConstraints = {@UniqueConstraint(columnNames = "EMAIL")})
public class User implements Serializable {


@Id
@Column(name="username", length=50)
private String username;
@OneToOne(cascade = {CascadeType.ALL})
private Password password;
private boolean enabled;
private int serial;
private String email;
@Version
private int version;

@ElementCollection(targetClass=Authority.class)
@CollectionTable(name="USER_AUTHORITY")
private List<Authority> authorities;

@OneToMany(mappedBy="user", fetch=FetchType.LAZY, cascade=CascadeType.ALL, ``orphanRemoval=true)
private Set<License> licenses;

private static final long serialVersionUID = 1L;

public User() {
    super();
    this.authorities = new ArrayList<Authority>();
} 
.... getters/setters.
移除

user=em.merge(用户)


DAO销毁方法中的语句。我不确定它是否会导致问题,但它不是必需的,因为用户之前已加载到语句中。

非常抱歉,但我是个白痴!我并没有像我想象的那样给服务班打电话。修正了这个问题,一切正常。再一次,对不起各位

问候

@Repository
public class UserJpaController {

@PersistenceContext
EntityManager em;

protected static final Logger logger =   Logger.getLogger("com.blackbox.genesisng.entities.UsersJpaController");

public void create(User user) throws PreexistingEntityException, Exception {



    if (findUser(user.getUsername()) != null) {
        throw new PreexistingEntityException("Users " + user + " already exists.");
    }

      em.persist(user);
      em.flush();


}

public void edit(User user) throws NonexistentEntityException, Exception {

        user = em.merge(user);
        em.flush();
}


public void destroy(String id) throws NonexistentEntityException {
        User user = em.find(User.class, id);
        user = em.merge(user);
        em.remove(user);


}

public List<User> findUserEntities() {
    return findUserEntities(true, -1, -1);
}

public List<User> findUserEntities(int maxResults, int firstResult) {
    return findUserEntities(false, maxResults, firstResult);
}

private List<User> findUserEntities(boolean all, int maxResults, int firstResult) {
        Query q = em.createQuery("select object(o) from User as o");
        if (!all) {
            q.setMaxResults(maxResults);
            q.setFirstResult(firstResult);
        }
        return q.getResultList();

}

public User findUser(String id) {
        return em.find(User.class, id);

}

public int getUserCount() {
        Query q = em.createQuery("select count(o) from User as o");
        return ((Long) q.getSingleResult()).intValue();

}

public User findUserByEmail(String email) {

        Query q = em.createQuery("select Object(o) from User as o where              o.email          =     :email");
        q.setParameter("email", email);
        List list = q.getResultList();
        if (list.size() == 0) {
            return null;
        }
        return (User) list.get(0);


}

public boolean exists(String id) {

    try {
         em.getReference(User.class,id);  
         return true;
         } 
         catch (EntityNotFoundException e) {
             return false;
         }


}



}
@Service
public class UserService  {

@Autowired
UserJpaController dao;

@Autowired
LicenseJpaController licenseDao;

        @Transactional
public void delete(UserDTO userDTO) {
    if (exists(userDTO.getUserName())){
        try {
        dao.destroy(userDTO.getUserName());
        } catch (NonexistentEntityException e) {
            // ignore as the previous test should prevent this.
        }

    }

}