JPA使用の@Queryの常用表記
3716 ワード
の準備を
エンティティ
同期タイプ
列挙された変換器
変更
コロンパラメータの使用
疑問符を使用して参照
検索
指定された列の1番目の書き方に戻る
指定された列の2番目の書き方を返します
この表記はnativeQueryであり,返された結果は各Objectに1つの配列が返され,配列の下付き文字0はapplyId,下付き文字1はtaskMessageが返される.
クエリーの列
クエリーの条件は定数です
リファレンス spel-support-in-spring-data-jpa-query-definitions Spring Data JPA @Query Spring JPA selecting specific columns spring-data-jpa-query-with-parameter-properties Spring @Query annotation with enum parameter Can I use enum parameter into JpaRepository nativeQuery? Spring Expression Language (SpEL) Using Literals in JPQL Persisting Enums in JPA
エンティティ
@Data
@Table(name = "task_apply")
@Entity
public class TaskApply {
@Id
@GeneratedValue
@Column(name = "apply_id")
private Long applyId;
private Integer status;
private SyncType type;
@Column(name = "task_message")
private String taskMessage;
}
同期タイプ
package com.charles.enums
public enum SyncType {
/**
*
*/
MANUAL("M", " "),
/**
*
*/
SCHEDULED("S", " ");
private final String value;
private final String text;
SyncType(String value, String text) {
this.value = value;
this.text = text;
}
public String text() {
return text;
}
public String getValue() {
return value;
}
public static SyncType fromValue(String type) {
for (SyncType value : SyncType.values()) {
if (value.equals(type)) {
return value;
}
}
return null;
}
}
列挙された変換器
import javax.persistence.AttributeConverter;
public class SyncTypeConverter implements AttributeConverter {
@Override
public String convertToDatabaseColumn(SyncType e) {
if (e == null) {
return null;
}
return e.getValue();
}
@Override
public SyncType convertToEntityAttribute(String value) {
if (value == null) {
return null;
}
return SyncType.fromValue(value);
}
}
変更
コロンパラメータの使用
@Modifying
@Query("update TaskApply set status = :status where applyId = :applyId")
void updateStatusByApplyId(@Param("applyId") Long applyId, @Param("status") Integer status);
疑問符を使用して参照
@Modifying
@Query("update TaskApply set status = ?2 where applyId = ?1")
void updateStatusByApplyId(Long applyId, Integer status);
検索
指定された列の1番目の書き方に戻る
package com.charles.vo;
@Data
public class TaskMessageVO {
private Long applyId;
private String taskMessage;
}
@Query("select new com.charles.vo.TaskMessageVO(applyId, taskMessage) from TaskApply where applyId in (:applyIds)")
List findTaskMessages(@Param("applyIds") List applyIds);
指定された列の2番目の書き方を返します
@Query(nativeQuery = true, value =
"SELECT id as applyId, task_message as taskMessage FROM task_apply WHERE apply_id IN (:applyIds)")
List
この表記はnativeQueryであり,返された結果は各Objectに1つの配列が返され,配列の下付き文字0はapplyId,下付き文字1はtaskMessageが返される.
クエリーの列
@Query("select distinct status from TaskApply where applyId in (:applyIds)")
List findDistinctStatus(@Param("applyIds") List applyIds);
クエリーの条件は定数です
@Query("select applyId from TaskApply where type <> com.charles.enums.SyncType.MANUAL")
List findNotManualSyncApplyIds();
リファレンス