0

我的服务层中有以下方法调用:

saveAdvertisement(childminderAdvertisement);

..which in 调用以下方法AdvertisementServiceImpl

public void saveAdvertisement(Advertisement advertisement) {
  advertisementRepository.save(advertisement);
}

AdvertisementRepository是一个org.springframework.data.jpa.repository.JpaRepository参数化如下:

 JpaRepository<Advertisement, Long>;

这是我的实体:

Advertisement

@RooJavaBean
@RooToString
@RooEquals
@RooJpaEntity(inheritanceType = "TABLE_PER_CLASS")
@Entity
public abstract class Advertisement {
...

ChildminderAdvertisement

@RooJavaBean
@RooToString
@RooEquals
@RooJpaEntity
@Entity
public class ChildminderAdvertisement extends Advertisement {
...

我注意到AdvertisementRepository使用超类 Advertisement 进行类型参数化)设法ChildminderAdvertisement正确地保留实例。

我的问题是双重的:

- Spring Data Jpa 如何管理子类的实例,而我使用超类的 JpaRepository?

- 使用超类作为类型参数有什么缺点(如果有的话)?

4

1 回答 1

1

对于 Q1:管理子类实例的不是 Spring,而是您的 JPA 提供者。Spring 仅将调用委托给 JPA 提供程序。反过来,它通过调用instance.getClass()检查它是否class是一个可持久类(即@Entity)来管理它。

至 Q2:我个人认为没有任何缺点。JpaRepository当然,如果您需要一个仅适用于更具体的子类型的扩展ChildminderAdvertisement(例如,仅在保存 aChildminderAdvertisement 时,您必须记录一些额外的内容),那么您需要实现JpaRepository<ChildminderAdvertisement, Long>.

于 2013-10-07T09:59:53.500 回答