gpt4 book ai didi

java - Spring Data中中间存储库的自定义实现

转载 作者:行者123 更新时间:2023-11-30 10:57:13 25 4
gpt4 key购买 nike

我在我的项目中使用 Spring Data,并且我有很多存储库。现在我想向一些存储库添加一个方法,但不是全部,所以我创建了一个接口(interface) LoggingRepositoryCustom,(简化)看起来像这样:

@NoRepositoryBean
public interface LoggingRepositoryCustom<T extends IEntity, ID extends Serializable> {
<S extends T> S save(S entity, AppUser author);
}

因为我需要对此进行自定义实现,所以我还创建了实现此接口(interface)的 LoggingRepositoryImpl:

@NoRepositoryBean
public class LoggingRepositoryImpl<T extends IEntity, ID extends Serializable> implements LoggingRepository {
@Override
public <S extends T> S save(S entity, AppUser author) {
//impl
}
}

最后,我有一些存储库,应该具有上述功能,例如AppUserRepo:

@Repository
public interface AppUserRepo extends PagingAndSortingRepository<AppUser, Long>, LoggingRepositoryCustom<AppUser, Long> {
//methods of this repo
}

但是,当我尝试部署此应用程序时,出现以下异常:

org.springframework.data.mapping.PropertyReferenceException: No property save found for type AppUser!

似乎没有反射(reflect)自定义实现,Spring Data 试图根据名称约定创建一个神奇的方法,从而寻找 AppUser 的属性“save”,该属性不存在。有没有一种方法可以实现一个接口(interface),由其他接口(interface)进一步扩展?

最佳答案

我在我的一个项目中添加了同样的问题......我做了如下让它工作:

1 - 创建你的“父”接口(interface)和实现:

存储库:

@NoRepositoryBean
public interface LoggingRepository<T extends IEntity, ID extends Serializable> extends PagingAndSortingRepository<T, Long>, LoggingRepositoryCustom<T, ID> {
}

存储库自定义

@Transactional(readOnly = true)
public interface LoggingRepositoryCustom<T extends IEntity, ID extends Serializable> {
<S extends T> S save(S entity, AppUser author);
}

存储库自定义的实现:

public class LoggingRepositoryImpl<T extends IEntity, ID extends Serializable> implements LoggingRepositoryCustom<T, ID> {
@Override
public <S extends T> S save(S entity, AppUser author) {
//impl
}
}

2 - 创建您的特定接口(interface)和实现:

存储库:

@Repository
public interface AppUserRepo extends LoggingRepository<AppUser, Long>, AppUserRepoCustom {
}

存储库自定义:

public interface AppUserRepoCustom<AppUser, Long> {
}

存储库实现:

public class AppUserRepoImpl extends LoggingRepositoryImpl<AppUser, Long> implements AppUserRepoCustom {
}

希望对你有帮助

关于java - Spring Data中中间存储库的自定义实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32712466/

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