我正在制作我的第一个springboot网络应用程序,并试图从postgresql服务器显示一些信息。当试图从数据库中获取一些信息时,它返回一个空列表。通过我在控制台中看到的内容,它会尝试使用错误的参数进行查询。
在我的数据库中,我有一个包含三个字段的表:“userId”,“firstName”和“surName”。根据我的理解,Hibernate尝试使用参数“users0_.user_id”,“users0_user_id”,“users0_.sur_name”进行查询。
要解决这个问题,我想编写自己的查询或修复当前查询。我该怎么做呢?
如您所见,我已使用某些System.Out.print语句检查了查询结果。
第一个返回list.size()为0,第二个返回值为null。
Console displaying what I think is the query info
这是我的UserController类中用于显示用户信息的函数。
@RequestMapping("/users")
public String getUsers(Model model) {
List <users>users = (List<users>) userServ.listAll();
System.out.print("THE SIZE WITH STRING CONCATINATION IS: " + users.size());
model.addAttribute("users", users);
System.out.print("THE NAME OF USER WITH INDEX =2 IS: " + userServ.getById(2).getFirstName());
return "showUsers";
}
用户的实体/域类:
@Entity
@Table(name="users")
public class users implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long userId;
private String firstName;
private String surName;
private long getId() { return userId; }
public void setId(long id) {this.userId = id;}
public String getFirstName() { return firstName; }
public String getSurName() { return surName; }
public void setSurname(String surName) {this.surName = surName; }
}
这是用于从DB检索用户的存储库的接口:
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.data.repository.CrudRepository;
import com.svein.models.users;
public interface UserRepository extends CrudRepository<users, Long> {
}
这是用户的服务类:
@Service
public class UserServiceImp implements userService{
@Autowired
private UserRepository userRepo;
@Override
public List<users> listAll() {
List<users> users = new ArrayList<>();
userRepo.findAll().forEach(users::add);
return users;
}
@Override
public users getById(long id) {
return userRepo.findById(id).orElseGet(users::new);
}
@Override
public users saveOrUpdate(users user) {
userRepo.save(user);
return null;
}
@Override
public void delete(Long id) {
userRepo.deleteById(id);
}
}
我希望调整或替换当前的查询,但也许代码有一些错误。正如我所说,我对此很陌生,但我觉得很奇怪,我没有编写一行SQL,而且在一个不同的项目中,它显示了检索正确信息的迹象(来自不同的数据库)。该类如何知道要查询的内容?
您需要在要在UserRepository类中编写的查询函数之上添加@Query注释。例如
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.data.repository.CrudRepository;
import com.svein.models.users;
public interface UserRepository extends CrudRepository<users, Long> {
@Query("Select * from users")
List<users> findAllUsers();
}
或者在UserServiceImpl中,userRepo.findAll()应该可以工作。您不需要遍历每个用户并将其返回到列表。您应该只返回userRepo.findAll()。
以下网址会让您更多地了解如何编写自己的查询。