Я использую пружинные данные JPA, столкнувшись с проблемой, поскольку результат всегда равен NULL, даже если запись присутствует в БД.
Я попытался отладить код пружины и проверил, правильно ли создан оператор. Оператор создан правильно, а параметр также заполнен правильно.
Конфигурация: -
Spring-boot = 2.0.5.RELEASE
Oracle DB = Oracle Database 11g, выпуск 11.2.0.2.0 - 64 бита
POM
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0</version>
</dependency>
</dependencies>
Класс сущности:
@Entity()
public class User {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "user_Sequence")
@SequenceGenerator(name = "user_Sequence", sequenceName = "USER_SEQ")
private Long id;
@Column(unique=true)
private String userName;
private String password;
//getter & setter
Класс репозитория
@Repository
public interface UserRepository extends
org.springframework.data.repository.CrudRepository<User, Long>{
User findByUserName(String userName);
User save(User user);
}
Класс обслуживания
@Service("loginService")
public class LoginService implements ILoginService {
@Autowired
UserRepository userRepository;
@Override
public boolean isValidUser(String userName, String password) {
User user = userRepository.findByUserName(userName);
if(user != null && user.getUserName().equals(userName) && user.equals(password)){
return true;
} else {
return false;
}
}
}
Скриншот отладки: -
Значение параметра Debug Screenshot равно "admin" и сформирован SQL
Сформированный SQL: -
select user0_."id" as id1_2_, user0_."password" as password2_2_, user0_."user_name" as user_name3_2_ from "user" user0_ where user0_."user_name"=?
Если я выполню тот же запрос в БД, результат будет: -
Скриншот результата