【发布时间】:2019-12-02 06:13:50
【问题描述】:
我有一个简单的关系,其中一个实体有许多特定于它的地址,定义为:
@Entity
public class Corporation {
@Id
private Long id;
@ElementCollection
@CollectionTable(name = "addresses_table", joinColumns = @JoinColumn(name = "corporation_id"))
private List<Address> addresses = new ArrayList<>();
}
Address 类使用@Embeddable 进行注释。这很有效,因为公司的每次更新都会删除其所有地址,然后插入新地址。这正是我正在寻找的行为。我尝试过的其他选项(OneToMany、ManyToMany)会导致性能下降,因为我需要跳过障碍,但仍然没有得到简单的 delete all + insert all 行为。
但是,有一个简单的要求,即我需要能够按某些条件查询地址。基本上这归结为一个简单的findAll(Pageable pageable, Specification spec) 方法。这对于当前和未来的用例来说已经足够了。
现在问题来了,可嵌入对象不是Entitys,因此我无法为它们创建 Spring 数据存储库。我能想到的唯一选择是:
使用本机实体管理器实现自定义存储库,但我不确定如何在代码方面以最佳方式执行此操作,以及它是否可以支持通用
Specification。如果没有,我仍然可以忍受,因为搜索地址的字段不会改变。像
select sth from Corporation c join c.addresses那样做一些连接查询,然后根据地址属性限制结果。在这里,我再次不确定这是否可行并且与直接对地址表进行简单排队一样高效
任何建议都将不胜感激,无论是关于所描述的选项还是其他替代方案。
【问题讨论】:
标签: hibernate jpa spring-data-jpa spring-data