0
0

More than 1 year has passed since last update.

【Spring Data JDBC】QueryアノテーションのSELECT文からnullが返ってくる

Last updated at Posted at 2023-08-16

はじめに

Springの勉強を始めてSpring Data JDBCの@Queryの操作が上手くいかず、
数時間を溶かしたので備忘録として残します。
参考リンク

問題

エラーを吐くわけではないのに、SELECT文がnullで返ってくる。

Users.java(Domain Object)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Users {
	/** 識別ID */
	@Id
	private Integer id;
	/** ユーザ名 */
	private String name;
	/** パスワード */
	private String password;
	/** 作成日時 */
	private Timestamp created_at;
	/** 更新日時 */
	private Timestamp updated_at;
}
Repository.java
public interface UsersRepository extends CrudRepository<Users,Integer>{	
	//ユーザ重複確認
	@Query("SELECT * FROM USERS WHERE NAME = ':name'")
	List<Users> uniqueUser(String name);
}
Application.java
@SpringBootApplication
public class LearningTimerApplication {

	public static void main(String[] args) {
		SpringApplication.run(LearningTimerApplication.class, args)
				.getBean(LearningTimerApplication.class).execute();
	}

	@Autowired
	UsersRepository users_repository;

	private void execute() {
		//ユーザチェック
		checkUser();
	}

	private void checkUser() {

		//ユーザ名,パスワード
		String name = "hogehoge";
		//ユーザ名が存在しているかチェック
		List<Users> users = users_repository.uniqueUser(name);
		System.out.println(users);
	}

コンソール
[]

解決方法

Repository.javaのWHEREに''(シングルクォーテーション)が不要でした。

Repository.javaを見てみる

Repository.java
public interface UsersRepository extends CrudRepository<Users,Integer>{	
	//ユーザ重複確認
	@Query("SELECT * FROM USERS WHERE NAME = ':name'")
	List<Users> uniqueUser(String name);
}

SQLに渡したいパラメータは:引数名で指定できますが、
:引数名を入れると''(シングルクォーテーション)も入るようです。

つまり、 WHERE NAME = ':name'と指定していますが、
WHERE NAME = :nameが正しいです。

Repository.java(修正後)
public interface UsersRepository extends CrudRepository<Users,Integer>{	
	//ユーザ重複確認
	@Query("SELECT * FROM USERS WHERE NAME = :name")
	List<Users> uniqueUser(String name);
}
コンソール
[Users(id=10, name=hogehoge, password=hogehoge, created_at=2023-08-16 20:26:41.670788, updated_at=2023-08-16 20:26:41.670788)]

終わりに

どなたかの参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0