私は助けてください。私のデータベースの1つのフィールドを更新していますが、JPAクエリーを使用するとあまりよくありません。私はまだ学んでいる。JPAクエリーを使用して単一のフォームを更新する方法
@Entity
public class CertificateProgramme {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull(message = "The above field must not be blank.")
@Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\."
+"[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@"
+"(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?",
message="Please enter a valid email address")
private String email;
private boolean flag;
フラグフィールドをfalseに更新します。私はserviceImplクラスでsaveメソッドを使用しているときに更新できますが、保存せずに試しても機能しません。
私はサービスインターフェースのメソッドunFlagger(CertificateProgramme certificateProgramme)
がServiceImpl
に実装されるように定義
public interface CertificateService {
List<CertificateProgramme> findAll();
CertificateProgramme ListAll();
CertificateProgramme findOne(Long id);
void save(CertificateProgramme certificateProgramme);
CertificateProgramme flagger(CertificateProgramme certificateProgramme);
CertificateProgramme unFlagger(CertificateProgramme certificateProgramme);
}
ServiceImpl.java
@Override
public CertificateProgramme flag(CertificateProgramme certificateProgramme) {
certificateDao.unFlagger(certificateProgramme);
return certificateProgramme;
}
Dao.java
@Repository
public interface CertificateDao extends CrudRepository<CertificateProgramme, Long> {
@Query("select t from CertificateProgramme t where t.user.id=?#{principal.id}")
List<CertificateProgramme> findAll();
@Query("select t from CertificateProgramme t where t.user.id=?#{principal.id}")
CertificateProgramme ListAll();
私はここに助けが必要してください
@Modifying
@Query("update CertificateProgramme ear set ear.flag = ?#{'FALSE'} where ear.user.id=?#{principal.id}")
CertificateProgramme unFlagger(CertificateProgramme flag);
コントローラ
これは、フラグフィールドを更新することになっているが、それは更新されません。私はむしろ間違いを起こしている。
@RequestMapping(value = "cert_prog/{certId}", method = RequestMethod.POST)
public String UpdateFlag(@PathVariable Long certId, CertificateProgramme certificateProgramme){
certificateService.unFlagger(certificateProgramme);
return String.format("redirect:/cert_prog/%s/edit", certId);
}
エラー
2017-02-25 21:40:28.257 ERROR 20769 --- [nio-8080-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query] with root cause
javax.persistence.TransactionRequiredException: Executing an update/delete query
at org.hibernate.jpa.spi.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:71) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final]
at org.springframework.data.jpa.repository.query.JpaQueryExecution$ModifyingExecution.doExecute(JpaQueryExecution.java:238) ~[spring-data-jpa-1.9.2.RELEASE.jar:na]
at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:78) ~[spring-data-jpa-1.9.2.RELEASE.jar:na]
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:100) ~[spring-data-jpa-1.9.2.RELEASE.jar:na]
at or
「CertificateDao.unFlagger」メソッドはどこからでも呼び出さなかったため、変更クエリがトリガされませんでした。コントローラーまたはサービスメソッドから呼び出す。 –
こんにちは@JakubCh。更新クエリを手伝ってもらえますか?フィールドを@Queryのような文字列に設定する方法を理解できません( "CertificateProgrammeのearセットear.flag = 'false' ear.user.id =?#{principal.id}) –
こんにちは@JakubCh 。私はそれを私のサービスに加えました。それは私にエラーを与える。すべてのフィールドを検証する必要があります。私はちょうど1つだけを更新する必要があります –