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

Java 如何使JPA列仅在JUnit测试期间可插入?,java,spring,hibernate,junit,Java,Spring,Hibernate,Junit,通常,时间戳应该只由mysql管理,而不是由使用实体的应用程序管理。因此,insertable=false 但是在junititest期间,我想强制将修改时间戳更改为固定值。这只有在insertable=true时才可能实现 问题:是否可以仅在测试期间更改属性?您可以在test/resources/META-INF目录中创建orm.xml并用xml覆盖映射 XML中的标记与注释相同,但不是kebab case中的camel case 请在此处查找整个规格: @Gimby是对的orm.xml是可

通常,时间戳应该只由mysql管理,而不是由使用实体的应用程序管理。因此,
insertable=false

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


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

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

XML中的标记与注释相同,但不是kebab case中的camel case

请在此处查找整个规格:

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

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

你的包裹在这里

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

XML中的标记与注释相同,但不是kebab case中的camel case

请在此处查找整个规格:

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

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

你的包裹在这里

在JPA之外进行。使用JdbcTemplate设置测试,运行测试,然后清除对数据库的更改,使其恢复到原始状态。JPA在这里给你买什么?我会使用JdbcTemplate。更简单。那么Updateable不也应该是false吗?如果模式不禁止,您应该可以使用JdbcTemplate使用原始SQL来实现它。禁止的注释是Hibernate构造。如果您不使用Hibernate,则不会强制执行此操作。请在JPA之外执行此操作。使用JdbcTemplate设置测试,运行测试,然后清除对数据库的更改,使其恢复到原始状态。JPA在这里给你买什么?我会使用JdbcTemplate。更简单。那么Updateable不也应该是false吗?如果模式不禁止,您应该可以使用JdbcTemplate使用原始SQL来实现它。禁止的注释是Hibernate构造。如果您不使用Hibernate,则不会强制执行该操作。“但是您必须在XML文件中指定整个映射MyEntity”-我认为这对于orm.XML不是真的,它应该是可添加的。对于hibernate映射文件,您所说的是正确的。如果不进行测试,很难判断。甚至规范也不是100%清楚:我将继续在测试时创建。请继续关注:-)@Gimby编辑了我的答案。感谢您的提示。值得注意的是,尽管这在技术上是对所问问题的正确答案,但我支持Duffymo的建议,即使用更直接的SQL方法来处理引导测试数据。这一解决方案打破了现实。但是你知道,堆栈溢出不是为了传递建议而存在的,它的存在是为了有问题的答案。“但是你必须在XML文件中指定整个映射MyEntity”-我不认为这对orm.XML是正确的,它应该是加性的。对于hibernate映射文件,您所说的是正确的。如果不进行测试,很难判断。甚至规范也不是100%清楚:我将继续在测试时创建。请继续关注:-)@Gimby编辑了我的答案。感谢您的提示。值得注意的是,尽管这在技术上是对所问问题的正确答案,但我支持Duffymo的建议,即使用更直接的SQL方法来处理引导测试数据。这一解决方案打破了现实。但你们知道,堆栈溢出的存在并不是为了传递建议,它的存在是为了有问题的答案。