我试图创建和预加载嵌入式H2 Db与一些数据使用schema.sql.但一旦我尝试使用POST请求添加新用户,发生以下错误。
2022-07-04 23:35:53.153 错误 8180 --- [NIO-8080-exec-2] O.A.C.C.C.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] 在路径 [] 的上下文中抛出了异常 [请求处理失败;嵌套异常是 org.springframework.dao.DataIntegrityViolationException: 无法执行语句;SQL [n/a];约束 [“公共上的主键。用户(USER_ID) ( /* 键:1 */ 1, 'mrxxx', 'mrxxx@gmail.com', '123456')“;SQL语句:插入用户(user_id、电子邮件、user_name、密码)值(默认值,?, ?, ?)[23505-214]];嵌套异常是 org.hibernate.exception.ConstraintViolationException: 无法执行语句] 与根本原因
org.h2.jdbc.JdbcSQL57ityConstraintViolationExc的:唯一索引或主键冲突:"PRIMary KEY ONPUBLIC.USERS(USER_ID) ( /* key: 1*/1,'mrxxx','mrxxx@gmail.com','123456')";SQL语句:插入到用户(user_id, email,user_name,密码)值(默认, ?, ?, ?) [23505-214]
我猜这是因为@ generated value(strategy = generation type。IDENTITY)正在尝试创建user_id = 1,但它已经存在于Db中,因为我们已经预加载了它。我不知道如何摆脱它
要求
{
"name" : "Arunkumar",
"email" : "arunkavi@gmail.com",
"password" : "arun1234"
}
反应
{
"timestamp": "2022-07-04T18:05:53.184+00:00",
"status": 500,
"error": "Internal Server Error",
"path": "/post"
}
请找到下面的代码段
应用程序.属性
spring.jpa.hibernate.ddl-auto=none
spring.datasource.initialization-mode=always
spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name= org.h2.Driver
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
架构.sql
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`user_id` int NOT NULL AUTO_INCREMENT,
`user_name` varchar(45) DEFAULT NULL,
`email` varchar(45) DEFAULT NULL,
`password` varchar(45) DEFAULT NULL,
PRIMARY KEY (`user_id`)
);
INSERT INTO `users` VALUES (1,'mrxxx', 'mrxxx@gmail.com', '123456');
用户.java
@Entity
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="USER_ID")
private int id;
@Column(name="USER_NAME")
private String name;
@Column(name="PASSWORD")
private String password;
@Column(name="EMAIL")
private String email;
.......
}
DbCotroller.java
@RestController
public class DbController {
@Autowired
private DbRepo userRepo;
@PostMapping("/post")
public ResponseEntity<?> saveUser(@RequestBody Users user){
userRepo.save(user);
return new ResponseEntity<>(user, HttpStatus.CREATED);
}
}
您可以在插入查询中省略id:
INSERT INTO `users`(`USER_NAME`,`EMAIL`,`PASSWORD`) VALUES ('mrxxx', 'mrxxx@gmail.com', '123456');
我开始制作一个简单的spring boot应用程序。 我的第一步是利用Spring JDBC支持,使用默认的H2内存数据库。对于示例数据,我在src/main/resources中有schema.sql和data.sql。 所以当spring启动时,它也会执行这两个脚本并填充H2数据库,我可以通过H2控制台访问它。
我在MySQL中创建了一个表,该表已启动,并且运行良好。但为了测试,我定义了一个带有H2的内存中数据库,它使用相同的DDL来克隆我可以用来测试我的应用程序的表。 但是,当我尝试为测试初始化表时,它会返回以下错误: 原因:组织。h2.jdbc。JdbcSQLException:未知的数据类型:“fieldF”; 这几乎是错误带来的最大帮助。我已经显式地将字段F设置为VARCHAR(40),那么我还需
配置详情 Spring:2.6 我创建了一个带有插件的Spring启动应用程序 春网 H2数据库 pom。xml 应用属性 命令行运行 作者epository.java 著者java(Pojo) 当我启动应用程序并转到http://localhost:8080/h2-console时,我看到一个jdbc: h2:~/test的JDBC URL,而不是jdbc: h2: mem: AS。在控制台中登
我正在尝试运行一个CRUD应用程序,但我得到了一个错误 2020-12-22 09:48:40.787警告83274--[main]ConfigServletWebServerApplicationContext:上下文初始化过程中遇到异常-取消刷新尝试:org.springframework.beans.factory.unsatistifiedDependencyException:创建名为“
我想在状态设置为“过去”时保存投票结果。我有一个H2 db,想添加一个只存储结果的mongoDB。我如何用Spring boot实现这一点? 到目前为止,我有一个投票程序,您可以在其中创建投票、编辑投票、投票等。 我添加了mongoDB,Spring引导,Springmvc和H2 db等依赖项。 这是我的应用程序属性: 我尝试过做一个接口mongoRepository: 投票类别:
有人知道为什么吗?我该怎么解决?