当实体映射到 GenerationType.IDENTITY 时,一个 sql 插入到 h2 测试数据库中的 id 列将具有指向序列的默认值。当使用 GenerationType.SEQUENCE 映射时,它将没有默认值。
我们想使用 GenerationType.SEQUENCE 因为它更冗长,我们想显示所有内容的来源。在测试期间,我们偶然发现了这个问题 - 当使用 @Sql 将脚本插入嵌入式 h2 数据库时,我们会收到关于非空约束的错误。当我们只是将脚本作为本机查询执行时也会发生这种情况。
使用 GenerationType.IDENTITY 时不会发生这种情况。上面的相同脚本可以正常工作。
如果我们使用 GenerationType.SEQUENCE 并通过调用下一个值函数将 id 传递给它,如下所示:
INSERT INTO example (id, name) (NEXTVAL('example_id_seq'), 'test');
Run Code Online (Sandbox Code Playgroud)
该脚本将正常工作。
这是一个映射发生问题的插入的示例:
@Entity
@Table(schema = DbSchemas.PUBLIC, name = DbTables.Example)
public class Example implements Serializable {
private static final long serialVersionUID = -8827852720381659873L;
private static final String EXAMPLE_GENERATOR = "example_generator";
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = EXAMPLE_GENERATOR)
@SequenceGenerator(name = EXAMPLE_GENERATOR, sequenceName = DbSequences.EXAMPLE_ID_SEQUENCE, …Run Code Online (Sandbox Code Playgroud) @ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(NoHandlerFoundException.class)
public ResponseEntity<Error> handle(NoHandlerFoundException ex){
String message = "HTTP " + ex.getHttpMethod() + " for " + ex.getRequestURL() + " is not supported.";
Error error = new Error(HttpStatus.NOT_FOUND.value(), message);
return new ResponseEntity<Error>(error, HttpStatus.NOT_FOUND);
}
}
Run Code Online (Sandbox Code Playgroud)
我的项目中有一个 nodemon 配置是什么verbose意思以及它有什么作用
{
"verbose": true,
"watch": "./server"
}
Run Code Online (Sandbox Code Playgroud)
我已经阅读了nodemon的自述文件,它没有谈论它
h2 ×1
hibernate ×1
java ×1
javascript ×1
node.js ×1
nodemon ×1
npm ×1
spring-aop ×1
spring-mvc ×1
unit-testing ×1