Hat jemand eine Idee, wie man mit Spring Data JPA eine einzelne Spalte erhält? Ich habe in meinem Spring Boot-Projekt ein Repository wie unten beschrieben erstellt. Beim Zugriff auf die Restful-URL wird jedoch immer die Fehlermeldung {"cause":null,"message":"PersistentEntity must not be null!"}
angezeigt.
@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UsersRepository extends CrudRepository<Users, Integer> {
@Query("SELECT u.userName FROM Users u")
public List<String> getUserName();
}
Wenn ich dann wie ../users/search/getUserName
auf die Restful-URL zugreife, erhalte ich die Fehlermeldung: {"cause":null,"message":"PersistentEntity must not be null!"}
Das funktioniert für mich.
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());
Die obige Zeile gab mir dieses Ergebnis:
data [abhijeet, abhijeet1, abhijeet2, abhijeet3, abhijeet4, abhijeet5]
Konzept ist: Erstellen Sie in Ihrer Entitätsklasse einen Konstruktor mit nur erforderlichen Instant-Variablen. Und verwenden Sie diesen Konstruktor in der unten gezeigten Repository-Methode.
Nehmen wir an, Sie haben ein Schnittstellen-Repository wie unten
Repository-Implementierung:
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);
}
Im Controller
@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
}
Wenn Sie nur eine einzelne Spalte zurückgeben möchten, sollten Sie unter Projektionen und Auszüge nachsehen, um bestimmte Spalten und andere nützliche Elemente zu filtern.