2017-05-25 7 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);}} 

私は私のコントローラをテストするときに、私はこのメッセージ春データJPAで

{"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

クエリ[Modifying' @ 'でアノテートする必要(https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.modifying-queries)と '@ Transactional'です。 – manish

答えて

1

を得ます既定では、新しいレコードを取得/挿入することしかできません。したがって、既存のレコードを変更/更新/削除する場合は、メソッドを@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

それはおそらく動作している "従業員"のIDが別のテーブルの外部キーであるため、別のエラーが発生する メッセージ:親の行を削除または更新できません:外部キー制約が失敗しました( 't_anomalies'.traitement'、CONSTRAINT 'FKafuchse28bfyo9jy5cgxqlybx' FOREIGN KEY(' id_employe')REFERENCES 'employe'(' id_employe')) – hich

+0

この場合、まず、上記の 'message 'テーブルのような子レコードを削除してから親レコードを削除しなければなりません'従業員' – Afridi

0

あなたはJpaRepositoryを使用しているので、あなたはすでにあなたのリポジトリ内delete(IDによって)メソッドを持っています。なぜあなたは別のものを実装していますか?

必要に応じて、Springブートはリポジトリのトランザクション設定を自動的に設定する必要があるため、設定する必要はありません。データを変更することができる

関連する問題