Ale*_*son 7 java spring hibernate jpa spring-data-jpa
我发现自己很难在Spring Data JPA中实现可自定义的方法.例如,我有一个宠物类,它有一个Owner(多对一相对.)如果我有一个方法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);
}
}
Run Code Online (Sandbox Code Playgroud)
但使用Spring DJPA并不是那么容易.我已经创建了一个扩展的接口JpaRepository < Pet, Integer >,希望父类有一个名为的方法
saveWithReference,但我没有找到任何东西..任何想法的人?
M. *_*num 13
你应该同时扩展PetRepository和OwnerRepository扩展JpaRepository.
public interface PetRepository extends JpaRepository<Pet, Long> {}
Run Code Online (Sandbox Code Playgroud)
和
public interface OwnerRepository extends JpaRepository<Owner, Long> {}
Run Code Online (Sandbox Code Playgroud)
使用Spring Data JPA,您可以使用该getOne方法获取引用,这与findOne实际查询数据库的方法形成对比.
您使用它编写的代码EntityManager基本相同,您应该将其放在服务方法中,而不是直接使用EntityManager2个存储库.
@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);
}
}
Run Code Online (Sandbox Code Playgroud)
这样的事情应该可以解决问题.无需在您的存储库中实现方法.
| 归档时间: |
|
| 查看次数: |
2123 次 |
| 最近记录: |