Java Spring Boot 在 SQL 查询中添加随机“d”字符
我正在使用 spring boot 制作一个用户管理平台。当我发出 GET 请求返回用户时,我收到此错误
There was an unexpected error (type=Internal Server Error, status=500). could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet ... Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'user0_.dtype' in 'field list'
那个随机的“dtype”列是什么?
编辑:我将“type”更改为“role”,因为它非常令人困惑。我还注意到,即使我在代码中更改它,我仍然会收到相同的错误。问题已进行了相应的编辑。
实体
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "users")
public class User {
@Id
@Column(name = "id")
private int id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@Column(name = "role")
private String role;
public User() {}
public User(String firstName, String lastName, String username, String password, String role) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.username = username;
this.password = password;
this.role = role;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", username=" + username
+ ", password=" +password+ ", role=" + role + "]";
}
}
控制器
@RestController
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping("/users")
public List<User> retrieveAllUsers(){
return userRepository.findAll();
}
@GetMapping("/users/{id}")
public User retreiveTask(@PathVariable int id) {
Optional<User> user = userRepository.findById(id);
return user.get();
}
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable int id) {
userRepository.deleteById(id);
}
@PostMapping("/users")
public ResponseEntity<Object> createUser(@RequestBody User user){
User savedUser = userRepository.save(user);
URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}")
.buildAndExpand(savedUser.getId()).toUri();
return ResponseEntity.created(location).build();
}
@PutMapping("/users/{id}")
public ResponseEntity<Object> updateUser(@RequestBody User user, @PathVariable int id){
Optional<User> userOptional = userRepository.findById(id);
if(!userOptional.isPresent())
return ResponseEntity.notFound().build();
user.setId(id);
userRepository.save(user);
return ResponseEntity.noContent().build();
}
}
MySQL 数据库脚本
CREATE TABLE users (
id int(11) NOT NULL AUTO_INCREMENT,
first_name varchar(100) NOT NULL,
last_name varchar(100) NOT NULL,
username varchar(100) NOT NULL,
password varchar(100) NOT NULL,
role text NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
任何帮助都将不胜感激。
d 代表数据;用户数据类型。您还将 id 设置为 AUTO_INCREMENT,这意味着您需要通过添加此 @GeneratedValue(strategy = GenerationType.IDENTITY) 在类级别声明它:
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@GetMapping(path = "User")
public ResponseEntity<List<User>> getAllUsers(){
Optional<List<User>> optUsers = Optional.ofNullable(userRepo.findAll());
if(optUsers.isPresent()) {
List<User> Users = optUsers.get();
return new ResponseEntity<List<User>>(Users, HttpStatus.OK);
} else {
return new ResponseEntity<>(null, HttpStatus.NO_CONTENT);
}
}
https://www.viralpatel.net/hibernate-inheritence-table-per-hierarchy-mapping/
If the
@DiscriminatorColumn
annotation is missing, and a discriminator column is required, the name of the discriminator column defaults to "DTYPE" and the discriminator type to DiscriminatorType.STRING.
我发现了问题。我没有提到 User 类是项目中几个类的超类,因为我认为这无关紧要。Spring 不会像实体类那样充当超类。所以我只需要删除注释,而只需添加注释“@MappedSuperclass”。