0

我有一个简单的 LocalDateTime - Timestamp - 在@Entity 中使用的转换器,如下所示:

@Converter(autoApply = true)
public class TimestampConverter implements AttributeConverter<LocalDateTime, Timestamp> {

  @Override
  public Timestamp convertToDatabaseColumn(LocalDateTime localDateTime) {
    return localDateTime == null ? null : DateUtil.convertToTimestamp(localDateTime);
  }

  @Override
  public LocalDateTime convertToEntityAttribute(Timestamp timestamp) {
    return timestamp == null ? null : DateUtil.convertToLocalDateTime(timestamp);
  }
}

这用于 LocalDateTime 字段的实体中,如下所示:

@Entity
@Table(name = "LOG")
@Data
public class Log implements Serializable {

  @Id
  private long id;

  private String content;

  @Column(name = "DATE_RECORDED")
  @Convert(converter = TimestampConverter.class)
  private LocalDateTime dateRecorded;
}

需要进行此转换以避免在空(null)值上出现以下错误:

ORA-00932: 不一致的数据类型: 预期的 TIMESTAMP 得到 BINARY

假设针对 oracle-xe testcontainer 在本地执行以下测试可以正常工作:

@Testcontainers
public class DbLogTest {

  protected static EntityManager entityManager;

  @Container
  protected static OracleContainer oracle = new OracleContainer();
  
  private static Map<String, String> getProperties() {
    Map<String, String> properties = new HashMap<>();
    properties.put("javax.persistence.jdbc.url", oracle.getJdbcUrl());
    properties.put("javax.persistence.jdbc.user", oracle.getUsername());
    properties.put("javax.persistence.jdbc.password", oracle.getPassword());
    return properties;
  }
  
  @BeforeAll
  static void beforeAll() {
    entityManager = Persistence.createEntityManagerFactory("persistenceUnitName", getProperties()).createEntityManager();
  }
  
  @Test
  public void insertLog() throws Exception {
    Log log = new Log();
    entityManager.persist(new Log());
    entityManager.flush();
    assertTrue(log.getId() > 0);
  }
}

mvn test由于上述错误,使用 maven build ( ) 执行相同的测试失败。调试显示在 maven 测试中执行时根本没有调用转换器。

谁能指出我正确的方向理解并最终解决这个问题?与 Maven 相比,在 IDE 中执行测试有什么区别?

作为解决方法,我可以不使用 LocalDateTime 但无论如何我想了解这个问题。

4

1 回答 1

0

该问题是由 MultiModuleBuild 引起的。Entity 和 Converter 与DbLogTest. 由于尚未进行整个构建,因此 DbLogTest 的 Maven 测试运行导致了观察到的行为。执行clean install解决了这个问题。

于 2021-11-29T09:05:24.453 回答