spring 异常错误:未找到列“USER0_.PROFILE_ID”; SQL语句:

sqxo8psd  于 2022-12-10  发布在  Spring
关注(0)|答案(1)|浏览(117)

我目前正在构建一个有用户逻辑的应用程序,我一直在尝试构建简单的方法和数据库上的一个mock,但我似乎无法通过API发出任何请求。但是,我能够访问h2数据库,我为测试而创建的用户在那里:

这是我尝试发出请求时得到的错误:
异常错误:未找到列“USER0_.PROFILE_ID”; SQL语句:从表格_使用者user 0_中选取使用者0_.使用者识别码做为使用者识别码1_1_、使用者0_.使用者电子邮件做为使用者电子邮件2_1_、使用者0_.使用者名称做为使用者名称3_1_、使用者0_.密码做为密码4_1_、使用者0_.设定档识别码做为设定档5_1_ [42122-214]
这是我的用户模型(还有getter、setter和constructor,但我不会把它们放在这里):

@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;

这是我的控制器:

@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();
    }
}

这是我的application.properties:

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

fquxozlt

fquxozlt1#

第一个问题:

您不需要@JoinColumn(这是错误的)
只需使用以下命令:

@OneToOne(cascade=CascadeType.ALL)
private UserProfile userProfile;

第二个问题:

您的data.sql包含DDL(创建等)和DML(插入等),但它只应包含DML。
如您所设置

spring.jpa.hibernate.ddl-auto=update

表将由Hibernate生成。您只需要插入数据。

相关问题