概要
【Spring Data JPA】自動実装されるメソッドの命名ルールの記事にある通り、JPAではrepositoryの命名規則に合うメソッでを定義することで、クエリを自動生成してくれる機能があります。今回はその自動生成でdeleteの時にAnd条件を使えるかという話です。
deleteについて
- 公式ドキュメントに記載の通り、deleteでもrepositoryにdeleteByメソッドを定義し条件に使用するプロパティ名を指定することで、クエリを自動生成してくれます。Spring Data JPA – Derived Delete Methodsに実装の詳細が解説してあります。
- [Java][Spring Boot][JPA] データベースを使う - NetBeansで始めるSpring Boot (6)の記事にある通り、deleteでもfindと同じような条件式が使えそうな雰囲気はあります。
結論
And条件は使えました。試してはいませんが、おそらく他の条件も使えると思います。
ただ、複雑な条件はNativeQueryとかで実装した方が良いと思います。。
実装サンプル
Entity
UserPost.java
@Entity
@Table(name = "user_posts")
public class UserPost {
@Id
private long id;
private long userId;
private String contents;
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
public long getUserId() {
return this.userId;
}
public void setUserId(long userId) {
this.userId = userId;
}
public String getContents() {
return this.contents;
}
public void setContents(String contents) {
this.contents = contents;
}
}
Repository
UserPostRepository.java
@Repository
public interface UserPostRepository extends JpaRepository<UserPost, String> {
// idとuserIdをAnd条件で指定してレコード削除
void deleteByIdAndUserId(long id, long userId);
}