【问题标题】:Cannot delete entity (JPA & Spring)无法删除实体(JPA 和 Spring)
【发布时间】:2011-07-17 23:25:39
【问题描述】:

无论我尝试什么,当我从我的 userService 类调用 delete() 时,我都无法删除用户实体。我得到一个异常 java.lang.IllegalArgumentException: Entity must be managed to call 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.

我的 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.
        }

    }

}

【问题讨论】:

    标签: spring jpa


    【解决方案1】:

    删除

    user = em.merge(user);

    DAO 销毁方法中的语句。我不确定它是否会导致probem,但不需要它,因为之前在语句中加载了用户。

    【讨论】:

      【解决方案2】:

      很抱歉,我是个白痴!我没有调用我认为的服务类。修复了这个问题,一切都按预期工作。再次对不起各位。

      问候

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-07
        • 2019-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-11
        相关资源
        最近更新 更多