Хранилище данных Spring jpa findBy возвращает ноль, даже если данные присутствуют в БД - PullRequest
0 голосов
/ 26 октября 2018

Я использую пружинные данные 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"=?

Если я выполню тот же запрос в БД, результат будет: - Скриншот результата

1 Ответ

0 голосов
/ 26 октября 2018

Поскольку вы не используете имя столбца в качестве имени поля, ему необходимо знать, что сопоставить в вашей сущности.

Измените свое поле на user_name или измените:

@Column(unique=true)
private String userName;

на

@Column(name="user_name", unique=true)
private String userName;

, таким образом, он сможет знать, на какой столбец он ссылается;

https://www.concretepage.com/spring-5/spring-data-crudrepository-example

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...