java - 有没有办法以可配置的方式将字段视为@Transient?

标签 java sql spring hibernate jpa

我们有一个不属于我们自己的数据库,它只有在性能测试和 CR 要求等之后才能部署到生产中,这是一个瓶颈。较低的环境没有相同的限制。

在进行模型更改时,我们的代码库在数据库之前就已准备好用于生产,并且在数据库准备就绪之前无法部署,否则新列将包含在 SELECTINSERT 中 查询将不存在并导致错误。这会导致停滞不前、全身头痛等。

幸运的是,@Transient 可以完美地解锁产品,但它会部署到所有环境。理想情况下,我们可以使该行为可配置,例如只有生产环境才会将这些字段视为 @Transient

@Getter
@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "INCOME", schema = "dbo")
public class Income {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = INCOME_ID)
    private long incomeId;

    @Column(name = RELATED_ID, insertable = false, updatable = false)
    @Transient
    private Long relatedId; 

有什么建议或可能的方法吗?

最佳答案

您可以利用xml mapping 。在你的情况下,它看起来像:

<?xml version="1.0" encoding="UTF-8"?>

<entity-mappings xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm http://xmlns.jcp.org/xml/ns/persistence/orm_2_1.xsd"
                 version="2.1">

    <entity class="package.name.Income">
        <attributes>
           <transient name="relatedId"/>
        </attributes>
    </entity>

</entity-mappings>

关于java - 有没有办法以可配置的方式将字段视为@Transient?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72103215/

相关文章:

java - Java虚拟机启动器无法创建虚拟机错误如何解决?

java - Firebase数据库,查找现有值

java - 从 Oracle 数据库中的数百万行中选择的最佳方法

spring - 在 Amazon Beanstalk 上处理 Spring Boot 集群 Websocket

java - 将语言环境与 Java 的 toLowerCase() 和 toUpperCase() 一起使用

java - 为什么我的水印在java中没有显示在中心?

mysql - SQL 为每个 ID 选择最近的记录

mysql - 如何在动态消息中选择我或我的 friend 创建的帖子?

spring - Spring 交易中的一个连接?

java - @Value 中的 SpEL 重构(加密属性)