Spring Data JPAを使用して単一の列を取得する方法はありますか? Spring Bootプロジェクトで以下のようなリポジトリを作成しましたが、Restful URLにアクセスすると常に{"cause":null,"message":"PersistentEntity must not be null!"}
エラーが発生します。
@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UsersRepository extends CrudRepository<Users, Integer> {
@Query("SELECT u.userName FROM Users u")
public List<String> getUserName();
}
../users/search/getUserName
などのRestful URLにアクセスすると、エラーが発生します:{"cause":null,"message":"PersistentEntity must not be null!"}
これは私のために働く。
public interface UserDataRepository extends JpaRepository<UserData, Long> {
@Query(value = "SELECT emp_name FROM user_data", nativeQuery = true)
public List<Object[]> findEmp_name();
}
System.out.println("data"+ userDataRepository.findEmp_name());
上記の行は私にこの結果を与えました:
data [abhijeet、abhijeet1、abhijeet2、abhijeet3、abhijeet4、abhijeet5]
概念は次のとおりです。エンティティクラスで、必要なインスタント変数のみを持つコンストラクタを作成します。そして、以下に示すリポジトリメソッドでそのコンストラクタを使用します。
以下のようなインターフェイスのリポジトリがあるとしましょう
リポジトリの実装:
public interface UserRepository<User> extends JpaRepository<User,String>
{
@Query(value = "select new com.org.User(usr.userId) from User usr where usr.name(:name))")
List<User> findUserIdAlone(@Param("name") String user);
}
コントローラー内
@RestController
public class UserController
{
@Autowired
private UserRepository<User> userRepository;
@Res
public ResponseEntity<User> getUser(@PathVariable("usrname") String userName)
{
User resultUser = usrRepository.findUserIdAlone(userName);
return ResponseEntity.ok(resultUser);
}
}
public class User
{
private String userId,userName;
public User(String userId)
{
this.userId=userId;
}
// setter and getters goes here
}
単一の列のみを返す場合は、 Projections and Excerpts を確認する必要があります。これにより、特定の列やその他の有用なものをフィルタリングできます。