英文:
Getting null from JPA query in Spring Boot
问题
我在这个Spring Boot项目中的JPA查询中一直得到null值。以下是该项目的代码部分:
实体(Entity):
@Entity
public class Admin {
@Id
private String login;
@Column
private String Password;
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getPassword() {
return Password;
}
public void setPassword(String password) {
Password = password;
}
}
仓库(Repository):
@Repository
public interface AdminRepository extends JpaRepository<Admin, String> {
@Query(value = "SELECT Password FROM Admin WHERE login = :login", nativeQuery = true)
String getp(@Param("login") String login);
}
控制器(Controller):
@Controller
public class AdminController {
@Autowired
AdminRepository adminRepo;
@RequestMapping("/")
public String home() {
return "index";
}
@RequestMapping("/adminlogin")
public String adminlogin(Model m) {
m.addAttribute("command", new Admin());
return "adminlogin";
}
@RequestMapping("/alogin")
public String login(@RequestParam String login, @RequestParam String password, Model m){
String p = adminRepo.getp(login);
if(password.equals(p)) {
return "admin";
}
else {
return "afail";}
}
}
我之前在许多项目中使用了相同的结构和查询,但这是第一次出现这种情况。所有内置查询和我编写的本地查询都返回null值,但在数据库中相同的查询显示已经填充了数据。
我不知道为什么会发生这种情况,如果有人有任何想法,请随时分享。
英文:
I have been getting null for my JPA queries in this Spring Boot Project. This is the project:
Entity:
@Entity
public class Admin {
@Id
private String login;
@Column
private String Password;
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getPassword() {
return Password;
}
public void setPassword(String password) {
Password = password;
}
Repository:
@Repository
public interface AdminRepository extends JpaRepository<Admin, String> {
@Query(value = "SELECT Password FROM Admin WHERE login = :login ", nativeQuery = true)
String getp(@Param("login") String login);
Controller:
@Controller
public class AdminController {
@Autowired
AdminRepository adminRepo;
@RequestMapping("/")
public String home() {
return "index";
}
@RequestMapping("/adminlogin")
public String adminlogin(Model m) {
m.addAttribute("command", new Admin());
return "adminlogin";
}
@RequestMapping("/alogin")
public String login(@RequestParam String login,@RequestParam String password,Model m){
String p = adminRepo.getp(login);
if(password.equals(p)) {
return "admin";
}
else {
return "afail";}
}
}
I have used same structure and query in many projects before but this is happening for first time. All the queries both inbuilt queries and the native queries that I wrote are giving null but the same queries in the database shows that it is populated.
I have no idea why this is happening, If any one have any thought, please, feel free to share.
答案1
得分: 0
我解决了这个问题。正如我之前提到的,我在许多其他项目中都使用了相同的方法,它通常都能正常工作,因此,如果我没有做错什么,这次也应该能正常工作。我的通常做法是首先创建一个实体,然后创建存储库,然后运行应用程序,这将在数据库中创建表,只有在此之后我才创建控制器和用户界面。
这次发生的是,我不小心在创建实体后立即运行了应用程序,这导致在数据库中创建了表。当时我认为没问题,没有特别注意,直到现在才意识到表和存储库没有连接。然后我删除了表格,再次运行应用程序创建表格,这次它像魔法一样正常工作。
所以结论是:如果在创建表之后创建存储库,查询将无法执行。只有在创建存储库之后才能创建表。
英文:
I cracked the problem. As I mentioned before that I have used same method in many other projects and it always used to work, so, there wasn't a reason that it wouldn't work this time, that is, if I didn't do something wrong, something different this time.
My usual practice is to first create a entity then the repository then I run the application which creates the table in the database, only after which I create the controller and the user Interface.
What happened this time was that I accidentally ran the application right after I created the entity, which resulted in the creation of the table in database. At the time I thought it was fine and didn't paid any attention to it, only now I realize the table and the repository were not connected. I then dropped the table and ran the app to create it again and it worked like charm.
So here is the conclusion:If the repository is created after the table, the queries will not go through. Only after the repository is created, the table must be created.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论