我正在使用 Spring Data JPA,面临问题,因为即使记录存在于数据库中,结果也总是为 NULL。
我尝试调试 spring 代码并检查语句是否正确创建。语句已正确创建,参数也已正确填充。
配置:- Spring-boot = 2.0.5.RELEASE
Oracle DB = Oracle 数据库 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;
}
}
}
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"=?
由于您没有使用列名称作为字段名称,因此它需要知道要映射到实体中的内容。
将您的字段更改为
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
在存储库中使用 findByNameEqualsAndStatus
以下是对我有用的事情。我正在使用 Oracle 19C 和 org.hibernate.dialect.Oracle12cDialect。
grant all on <schema>.<table> to <user>;
grant all on <schema>.<sequence> to <user>;