Spring、H2 为不同的环境定义了不同的注解值
Posted
技术标签:
【中文标题】Spring、H2 为不同的环境定义了不同的注解值【英文标题】:Spring, H2 define different annotation value for different Environments 【发布时间】:2018-09-04 09:08:38 【问题描述】:快速概览情况。 我有一个带有“JSONB”字段的 Postgres 数据库,并将它连接到我的 Spring 应用程序,在其中我使用 Hibernate 作为 ORM。我已经定义了我的自定义 JSON 类型并将该类型分配给相应的 Postgres 列:
@Column(name = "note", columnDefinition = "jsonb")
@Type(type = "JsonNoteType")
private JsonNote jsonNote;
这里一切正常,问题出现了,因为我还想要第二个测试环境,在其中我将数据加载到内存数据库中的 H2 中。 由于 H2 不支持 JSONB 类型,我必须告诉他将其视为“其他”对象,这导致 columnDefinition 更改:
@Column(name = "note", columnDefinition = "other")
@Type(type = "JsonNoteType")
private JsonNote jsonNote;
目前我一直根据我想要运行的测试手动更改该字段。
如何配置我的应用程序以更改注释 columnDefinition 的值?
由于评估变量的“时间”,我无法从 application.properties 加载值,所以我更多地考虑了运行配置设置,但仍然不知道如何。任何建议都会有所帮助,谢谢
【问题讨论】:
【参考方案1】:您需要提供一个 ORM.xml。 在 ORM.xml 中,您可以覆盖列定义。您还可以为每个环境设置 ORM.xml 位置。 (需要手动配置)
很遗憾,您需要进行一些设置才能执行此操作,但请查看 this question 有帮助。
【讨论】:
这实际上可能是一个很好的解决方案,我看到的唯一问题是在重建整个项目时导入 Maven 的依赖项,这个修复会中断,也许我可以写一个补丁文件来重写 orm.xml导入后,但我仍然希望有一个更清洁的解决方案^^ 您可以为每个环境使用相同的构建,并指定运行应用程序时应该激活的 Spring Profile(-D 参数),(从而设置活动的 application-PROFILE.properties 文件)。以上是关于Spring、H2 为不同的环境定义了不同的注解值的主要内容,如果未能解决你的问题,请参考以下文章
Mybatis根据Spring配置文件实现写不同的Sql语句
如何使用注解在 Hibernate 4 和 Spring 中定义不同类型的关系?