我有一个名为 PetOwner 的实体。PetOwner 有一个宠物列表。每个宠物都有一个商店(即:这个宠物来自的商店)。Pet 是一个抽象类,获得一个具体版本会执行很多连接 ( @Inheritance(strategy = InheritanceType.JOINED)
)。我想在 PetOwner 上有一个带有这个签名的方法:
Set<Store> getAllStores();
问题是加载宠物列表非常慢,实际上没有必要获取商店列表。当我打电话时getAllStores
,我希望它像这样运行 SQL:
SELECT DISTINCT store_id
FROM pet
WHERE petowner_id = x;
但如果我这样实现它:
Set<Stores> stores = //
for (pet : pets)
stores.add(pet.getStore());
return stores;
它会拉入所有宠物并且非常缓慢。那么我怎样才能防止它拉进所有的宠物呢?理想情况下,我确实希望在 PetOwner 对象上使用此方法,因为我认为这样的代码更加面向对象。
此外,在 PetOwner 中还有其他方法,即使速度很慢,我也确实需要加载宠物列表。但我并不总是调用它,这就是为什么我只想要这种方法来避免加载宠物列表。