Spring 在H2上测试hibernate实体

Spring 在H2上测试hibernate实体,spring,hibernate,unit-testing,spring-data,h2,Spring,Hibernate,Unit Testing,Spring Data,H2,我是TDD的粉丝,我拒绝推送未经测试的代码。在生产中,我使用的是mysql版本5.7。我希望在单元测试中使用H2 我有一个非常简单的实体,名为Messagedefine,如下所示 package com.question.domain; import org.hibernate.envers.Audited; import javax.persistence.*; @Entity @Table(name = MessageEntity.TABLE) public class Messag

我是TDD的粉丝,我拒绝推送未经测试的代码。在生产中,我使用的是mysql版本5.7。我希望在单元测试中使用H2

我有一个非常简单的实体,名为
Message
define,如下所示

package com.question.domain;


import org.hibernate.envers.Audited;
import javax.persistence.*;


@Entity
@Table(name = MessageEntity.TABLE)
public class MessageEntity {

    public static final String TABLE = "question";
    public static final String COLUMN_MESSAGE = "massage";

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @Audited
    @Column(name = COLUMN_MESSAGE, nullable = false, columnDefinition = "TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")
    private String message;

}
我的测试失败了,因为h2不支持
文本字符集utf8mb4 COLLATE utf8mb4\u unicode\u ci
作为列类型。是否有一种方法可以告诉hibernate仅使用mysql使用文本字符集utf8mb4校对utf8mb4\U unicode\U ci

我可以想象hibernate会有额外的注释来调整不同的后端。比如:

@Audited
@MysqlColumn(name = COLUMN_MESSAGE, nullable = false, columnDefinition = "TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")
private String message;

首先,我不会使用Hibernate来创建数据库模式。FlywayDB或Liquibase是这项工作的合适工具。但是我也不会测试应该在MySQL上用H2运行的代码。这是让测试通过的最好方法,尽管代码在生产中会失败,反之亦然。我非常喜欢你的观点。不幸的是,您提议的更改需要数百万行重构#为什么应该在MySQL上运行的代码需要在MySQL上测试一百万行重构?我不会首先使用Hibernate来创建数据库模式。FlywayDB或Liquibase是这项工作的合适工具。但是我也不会测试应该在MySQL上用H2运行的代码。这是让测试通过的最好方法,尽管代码在生产中会失败,反之亦然。我非常喜欢你的观点。不幸的是,您提议的更改需要数百万行重构#为什么在MySQL上运行的代码需要在MySQL上测试一百万行重构?