java - 如何使 JPA 列仅在 JUnit 测试期间可插入?

标签 java spring hibernate junit

@Entity
public class MyEntity {
    @Column(insertable = false,
            updatable = true,
            columnDefinition = "TIMESTAMP default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP")
    private LocalDateTime modification;
}

一般来说,时间戳应该仅由mysql管理,而不是由使用实体的应用程序管理。因此insertable=false

但是在junit itest期间,我想强制将修改时间戳更改为固定值。只有 insertable=true 才可能实现。

问题:是否可以仅在测试期间更改属性?

最佳答案

您可以在 test/resources/META-INF 目录中创建 orm.xml 并使用 XML 覆盖映射。

XML 中的标签与注释相同,但不是 kebab-case 中的驼峰式命名法。

请在此处查找完整规范: http://www.datanucleus.org/products/accessplatform/jpa/metadata_xml.html

@Gimby 是对的,orm.xml 是附加的,因此您可以覆盖您需要的内容:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="2.1"
                 xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm">

    <package>your package here</package>

    <entity class="MyEntity">
        <attributes>
            <basic name="modification">
                <column insertable="true" />
            </basic>
        </attributes>
    </entity>

</entity-mappings>

关于java - 如何使 JPA 列仅在 JUnit 测试期间可插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56561970/

相关文章:

java - 使用 RMI 进行 Spring 依赖注入(inject)

java - 如何描述一对多关系(JPA/HIbernate)

java - 将多个数据库结果写入 csv 文件

java - Arraylist中的Arraylist,未经检查的错误。 java

java - Spring Security 3.1 + JPA - 空指针异常

java - 将@RequestParam 从@ActionMapping 传递到@RenderMapping

java - 删除实体时 hibernate 分离实体错误

hibernate - chalice : Select returns (randomly) null while row exists in PostgreSQL with connection pooling turned on

Java:使用unicode上划线显示平方根时字符串的长度?

java - REST 服务仅返回当前用户相关的资源