我们有一个不属于我们自己的数据库,它只有在性能测试和 CR 要求等之后才能部署到生产中,这是一个瓶颈。较低的环境没有相同的限制。
在进行模型更改时,我们的代码库在数据库之前就已准备好用于生产,并且在数据库准备就绪之前无法部署,否则新列将包含在 SELECT
或 INSERT 中
查询将不存在并导致错误。这会导致停滞不前、全身头痛等。
幸运的是,@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/