2

我有以下一组课程

@Embeddable
public class SharedClass {
    ...
    private String legacyField;
    ...
}

@Entity
public class LongStandingEntity {
    ...
    private SharedClass sharedClass;
    ...
}

Wherelegacyfield将一些过时的数据存储在旧对象中,但不为新对象收集。但是我确实需要能够继续访问旧数据。

我正在创建一个新实体,它也利用SharedClass

@Entity
public class NewEntity {
    ...
    private SharedClass sharedClass;
    ...
}

它不需要legacyField,我想避免在数据库中为它添加一列,同时保持映射为LongStandingEntity.

JPA注释可以做到这一点吗?

4

3 回答 3

1

我不记得可以帮助您的特定注释。我还是宁愿在这种情况下采取设计方法。如果您有仅属于某个类的字段,请将它们分隔在另一个仅与旧数据相关联的可嵌入类中。

对我来说似乎是一种更清洁的方法,只是为了保持实体的明显区别。

于 2012-09-28T17:25:39.400 回答
1

我发现的一种解决方法是用参数 insertable=false 和 updatable=false 覆盖关联。

@Entity
public class NewEntity {
    ...
    @Embedded
    @AssociationOverride(name = "legacyField", joinColumns = @JoinColumn(insertable = false, updatable = false))
    private SharedClass sharedClass;
    ...
}
于 2016-04-12T11:30:48.517 回答
1

我解决了以下问题

@Entity
public class NewEntity {
    ...
    @AttributeOverrides({
        @AttributeOverride(name = "legacyField", column =  @Column(insertable = false, updatable = false))
    })
    @Embedded
    private SharedClass sharedClass;
    ...
}

更新但读取实体时出现错误:列 new_entity_.legacyField 在字符 1504 处不存在

所以问题没有解决

于 2021-01-14T16:39:41.377 回答