2017-05-25 73 views
0

我想从我的数据库中删除一些员工 但我不能。 这是我的仓库代码:在春季项目删除JpaRepository

public interface EmployeRepository extends JpaRepository<Employe, Long> { 
@Query("delete from Employe e where e.idEmploye=:x") 
public Employe deleteEmploye(@Param("x") int idEmploye); } 

这是我的控制器:

@RestController public class EmployeRestService { 
@Autowired 
private EmployeMetier EmployeMetier; 
@RequestMapping(value="/employe3",method=RequestMethod.DELETE) 
public Employe deleteEmploye(@RequestParam int idEmploye) { 
    return EmployeMetier.deleteEmploye(idEmploye);}} 

当我测试控制器,我得到这个消息

{"timestamp": 1495688812536, 
"status": 500, 
"error": "Internal Server Error", 
"exception": "org.springframework.dao.InvalidDataAccessApiUsageException", 
"message": "org.hibernate.hql.internal.QueryExecutionRequestException: Not 
supported for DML operations [delete from org.st.entities.Employe e where 
e.idEmploye=:x]; nested exception is java.lang.IllegalStateException: 
org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for 
DML operations [delete from org.st.entities.Employe e where 
e.idEmploye=:x]", 
"path": "/employe3" 

}

+0

可以更改数据的查询[需要使用@ @修饰]注释(https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.modifying-queries)和'@ Transactional'。 – manish

回答

1

使用Spring数据JPA ,您只能在默认情况下检索/插入新记录。因此,如果您想修改/更新/删除现有记录,则必须将您的方法标记为@Transactional & @修改以指示Spring给定的方法可以随时更改现有记录。所以 试试这个:

public interface EmployeRepository extends JpaRepository<Employe, Long> { 

    @Transactional 
    @Modifying 
    @Query("delete from Employe e where e.idEmploye=:x") 
    public Employe deleteEmploye(@Param("x") int idEmploye); 
} 
+0

它可能在工作 但我得到另一个错误,因为“employees”的ID是另一个表中的外键 message:无法删除或更新父行:外键约束失败('t_anomalies'.'traitement',CONSTRAINT 'FKafuchse28bfyo9jy5cgxqlybx' FOREIGN KEY('id_employe')REFERENCES'employe'('id_employe')) – hich

+0

@在这种情况下,首先必须删除它的子记录,如上面的情况,它的'message'表,然后是父记录'雇员' – Afridi

0

您使用的是JpaRepository,那么你已经在你的储存库delete由ID)方法。你为什么要实现另一个?

如果需要,Spring Boot应自动为您的存储库设置事务设置,因此您无需设置它们。