[英]org.h2.jdbc.JdbcSQLSyntaxErrorException: Column not found; SQL statement [SPRINGBOOT]
[英]org.h2.jdbc.JdbcSQLSyntaxErrorException : Column "USER0_.PROFILE_ID" not found; SQL statement:
我目前正在構建一個具有用戶邏輯的應用程序,並且我一直在嘗試構建簡單的方法並且只對數據庫進行 1 個模擬,但我似乎無法通過 api 發出任何請求。但是,我能夠訪問 h2 數據庫,我為測試創建的用戶就在那里:
這是我嘗試發出請求時遇到的錯誤:
org.h2.jdbc.JdbcSQLSyntaxErrorException:找不到列“USER0_.PROFILE_ID”; SQL 語句:select user0_.user_id 作為 user_id1_1_,user0_.user_email 作為 user_ema2_1_,user0_.user_name 作為 user_nam3_1_,user0_.password 作為 password4_1_,user0_.profile_id 作為 profile_5_1_ 來自 table_user user0_ [42122-214]
這是我的用戶 model(還有 getter、setter 和構造函數,但我不會把它們放在這里):
@Entity
@Table(name="table_user")
public class User implements Serializable{
private static final long serialVersionUID = 1L;
@Column(name="user_name")
private String name;
@Column(name="user_email", unique=true)
private String email;
@Column(name="password")
private String password;
@Column(name="user_id")
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="profile_id")
private UserProfile userProfile;
這是我的 controller:
@RestController
@RequestMapping(value="/users", produces="application/json")
public class UserController {
@Autowired
private TheUserRepository repo;
@GetMapping
public ResponseEntity<List<User>> findAll(){
List<User> users= repo.findAll();
return ResponseEntity.ok().body(users);
}
@GetMapping(value="/{id}")
public ResponseEntity<Optional<User>> findById(@PathVariable Integer id){
Optional<User> user=repo.findById(id);
return ResponseEntity.ok().body(user);
}
@GetMapping(value="emails/{email}")
public ResponseEntity<User> doesEmailExist(User user){
String email=user.getEmail();
doesUserExist(email);
return ResponseEntity.ok().body(user);
}
private boolean doesUserExist(String email) {
if (repo.findByEmail(email) != null) {
return true;
}
else {
return false;
}
}
@PostMapping
public ResponseEntity<String> insert(@RequestBody User user){
User entity=repo.findByEmail(user.getEmail());
if(entity==null) {
repo.save(entity);
return ResponseEntity.status(HttpStatus.CREATED).body("USER SUCESSFULLY CREATED");
}else {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("AN USER ASSOCIATED TO THIS EMAIL ALREADY EXISTS");
}
}
@PutMapping(value="/updateName/{id}")
public ResponseEntity<User> updateName(@PathVariable Integer id, @RequestBody User user){
User updatedName=user;
updatedName.setName(user.getName());
repo.save(updatedName);
return ResponseEntity.ok().body(updatedName);
}
@PutMapping(value="/updatePassword/{id}")
public ResponseEntity<User> updatePassword(@PathVariable Integer id, @RequestBody User user){
User updatedPassword=user;
updatedPassword.setName(user.getPassword());
repo.save(updatedPassword);
return ResponseEntity.ok().body(updatedPassword);
}
@DeleteMapping(value="/{id}")
public ResponseEntity<User> delete(@PathVariable Integer id){
repo.deleteById(id);
return ResponseEntity.noContent().build();
}
}
這是我的應用程序。屬性:
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.defer-datasource-initialization=true
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.application.name=currency-exchange-service
server.port= 8080
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.hbm2ddl.auto=update
和我的數據。sql:
DROP TABLE IF EXISTS `TABLE_USER`;
CREATE TABLE `TABLE_USER`(
`USER_NAME` varchar(250) NOT NULL,
`USER_EMAIL` varchar(250) NOT NULL,
`PASSWORD` varchar(250) NOT NULL,
`USER_ID` int AUTO_INCREMENT PRIMARY KEY,
`USER_PROFILE` varchar(250)
);
INSERT INTO `TABLE_USER` (`USER_NAME`, `USER_EMAIL`, `PASSWORD`, `USER_PROFILE`)
VALUES ('vitória', 'vitoria@gmail.com', 'testing', 'testing');
非常感謝任何試圖提供幫助的人!
如果有什么我遺漏的,它可能在這里: https://github.com/vitoriaacarvalho/recommend-me-a-show/tree/main/recommend-me-a-show
第一個問題:
你不需要@JoinColumn
(這是錯誤的)
只需使用這個:
@OneToOne(cascade=CascadeType.ALL)
private UserProfile userProfile;
第二個問題:
您的 data.sql 包含 DDL(創建等)和 DML(插入等),但這應該只包含 DML。
正如你所設定的
spring.jpa.hibernate.ddl-auto=update
表將由Hibernate生成。你只需要插入數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.