gpt4 book ai didi

java - Spring 数据 JPA 中 getReference 方法的替代方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:54:44 27 4
gpt4 key购买 nike

我发现自己很难在 Spring Data JPA 中实现可自定义的方法。例如,我有一个 Pet 类,它有一个所有者(多对一关系)。如果我有一个方法到 save(Pet pet, int ownerId) 怎么办? .我怎样才能得到 ownerId ?使用 Hibernate 我就可以 getReference像那样

public Pet save(Pet pet, int ownerId) {
if (!pet.isNew() && get(pet.getId(), ownerId) == null) {
return null;
}
pet.setUser(em.getReference(Owner.class, ownerId));
if (pet.isNew()) {
em.persist(pet);
return pet;
} else {
return em.merge(pet);
}
}

但是使用 Spring DJPA 并不是那么容易。我创建了一个扩展 JpaRepository < Pet, Integer > 的接口(interface),希望父类有个方法叫 saveWithReference , 但我什么也没找到.. 伙计们有什么想法吗?

最佳答案

你应该有一个 PetRepositoryOwnerRepository 都扩展了 JpaRepository

public interface PetRepository extends JpaRepository<Pet, Long> {}

public interface OwnerRepository extends JpaRepository<Owner, Long> {}

使用 Spring Data JPA,您可以使用 getOne获取引用的方法,这与实际查询数据库的 findOne 形成对比。

您使用 EntityManager 编写的代码基本相同,您应该将其放在服务方法中,而不是直接使用 EntityManager 使用 2 个存储库。

@Service
@Transactional
public PetService {

private final PetRepository pets;
private final OwnerRepository owners;

public PetService(PetRepository pets, OwnerRepository owners) {
this.pets=pets;
this.owners=owners;
}

public Pet savePet(Pet pet, long ownerId) {
if (!pet.isNew() && get(pet.getId(), ownerId) == null) {
return null;
}
pet.setUser(owners.getOne(ownerId));
return pets.save(pet);
}
}

类似的东西应该可以解决问题。无需在您的存储库中实现方法。

关于java - Spring 数据 JPA 中 getReference 方法的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45831695/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com