【问题标题】:How to keep current and previous location field in database?如何在数据库中保留当前和以前的位置字段?
【发布时间】:2020-10-28 22:24:47
【问题描述】:

我正在实施办公室搬迁解决方案。主要任务之一是显示资产/家具应该移动到哪里。我有一个这样的实体(短版):

@Entity
@Table
class Asset extends BaseEntity{

private String name;

@Embedded
private Localization localization;

本地化包含Floor(floor_id, floor_name), x_axis, y_axis;

这是我的问题的图形表示(在前端)。

如何在数据库中保持当前和下一个(目标)本地化?我尝试了一些方法,但没有奏效。喜欢这里:

@Entity
@Table
class Asset extends BaseEntity{
    
private String name;
    
@AttributeOverrides({
    @AttributeOverride(name="floor.id", column=@Column(name="current_floor_id")),
})
@Embedded
private Localization localization;

@AttributeOverrides({
    @AttributeOverride(name="floor.id", column=@Column(name="destination_floor_id")),
})
@Embedded
private Localization destinationLocalization;

但它对我大吼大叫 floor_id 不是唯一的,应该 insert=false 和 updatable=false。

我尝试过的另一种方法是@OneToOne 与新实体 Column 的关系,甚至加入没有关系的查询。

我听说过 Hibernate Envers,也许这就是解决方案?

【问题讨论】:

    标签: java sql spring hibernate


    【解决方案1】:

    如果您只需要 2 个位置,我建议您使用您已经提到的方法,即在实体中保留旧的和当前的位置信息。

    如果您需要历史记录,您可以创建一个实体,例如AssetLocation 带有代理 id 并在 Asset 中引用它。只是不要删除旧的AssetLocation 对象,然后你可以创建一个一对多的关联来引用旧的位置。

    您也可以使用 envers,但您必须了解一些限制,您可以在文档中了解这些限制。

    【讨论】:

      猜你喜欢
      • 2013-12-02
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      相关资源
      最近更新 更多