- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在 spring-data-cassandra 中扩展 CassandraRepository?
我尝试了很多不同的组合来使其发挥作用,最终我得到了下面的结果。
用户.java
@Table(name = User.TABLE)
public class User {
private static final String TABLE = "user";
@PartitionKey
private UUID id;
@Column
private String name;
// Getter setter methods
...
}
CassandraRepositoryCustom.java
@NoRepositoryBean
public interface CassandraRepositoryCustom<T> extends CassandraRepository<T> {
public T save(T t, Options options);
}
CassandraRepositoryImpl.java
public class CassandraRepositoryImpl<T>
extends SimpleCassandraRepository<T, MapId>
implements CassandraRepositoryCustom<T> {
public CassandraRepositoryImpl(CassandraEntityInformation<T, MapId> metadata,
CassandraOperations operations) {
super(metadata, operations);
}
@Override
public T save(T t, Options options) {
...
}
}
UserRepositoryCustom.java
public interface UserRepositoryCustom extends CassandraRepositoryCustom<User> {
User findById(UUID id);
}
UserRepositoryImpl.java
public class UserRepositoryImpl
extends CassandraRepositoryImpl<User>
implements CassandraRepositoryCustom<User> {
public UserRepositoryImpl(CassandraEntityInformation<T, MapId> metadata,
CassandraOperations operations) {
super(metadata, operations);
}
}
UserDao.java
@Component
public class UserDao {
@Autowired
private UserRepositoryCustom repo;
public save(User user, Options options) {
repo.save(user, options);
}
public getUser(UUID id) {
repo.findById(id);
}
}
CassandraConfig.java
@Configuration
@EnableCassandraRepositories(repositoryBaseClass = CassandraRepositoryImpl.class)
public class CassandraConfig {
...
}
现在我遇到的只是以下异常
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepositoryCustom': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property save found for type User!
最佳答案
您可以通过两种方式自定义 Spring Data 存储库:
根据上面的代码,我推断您正在尝试添加应可用于多个存储库的方法。 reference documentation包含如何自定义单个存储库的指南。
向所有存储库添加方法需要执行四个步骤。如果您想提供可以从多个存储库访问的通用方法,例如使用 save(T, Options)
的示例,则此方法非常方便。 .
添加扩展 SimpleCassandraRepository
的基类包含您计划公开的方法。
public class MyCustomizedCassandraRepository<T>
extends SimpleCassandraRepository<T, MapId>
implements MyCassandraRepository<T> {
public MyCustomizedCassandraRepository(CassandraEntityInformation<T, MapId> metadata,
CassandraOperations operations) {
super(metadata, operations);
}
public T save(T entity, WriteOptions options) {
System.out.println(String.format("Called MyCustomizedCassandraRepository.save(%s, %s)",
entity, options));
return entity;
}
}
在@EnableCassandraRepositories
中配置基类
@SpringBootApplication
@EnableCassandraRepositories(repositoryBaseClass = MyCustomizedCassandraRepository.class)
public class DemoApplication {
// ...
}
现在创建一个接口(interface)来声明您要公开的方法。这样做可以让您从基本接口(interface)进行扩展,而不是在每个存储库上声明方法,但这完全取决于您。
@NoRepositoryBean
public interface MyCassandraRepository<T> extends CassandraRepository<T> {
/**
* Customized save method.
*/
T save(T entity, WriteOptions options);
}
通过扩展基本接口(interface)来声明存储库接口(interface)
interface UserRepository extends MyCassandraRepository<User> {
}
关于命名没有严格的规则。重要的位是设置 repositoryBaseClass
在@EnableCassandraRepositories
以及基本方法和存储库接口(interface)方法之间的方法名称/参数类型收敛。
我创建了一个可运行的示例来自定义存储库基类。找到本文末尾的链接。
上面的代码既不能编译(因为 public UserRepositoryImpl(CassandraEntityInformation<T, MapId> metadata
),也不会导致 PropertyReferenceException
.
另请参阅:
关于java - 如何扩展 CassandraRepository,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40987566/
我有一个 Spring 应用程序,它从 Cassandra 数据库请求数据。通常,我会指定在存储库类的查询方法中使用的方便的 POJO 作为数据模型返回结果。 但在我当前的情况下,我不希望映射到特定的
如何在 spring-data-cassandra 中扩展 CassandraRepository? 我尝试了很多不同的组合来使其发挥作用,最终我得到了下面的结果。 用户.java @Table(na
我正在寻找一种解决方案,使用 Cassandra(版本 3.11.3)数据库为基于 Spring Boot 的 REST 服务实现分页。我们正在使用 Spring Boot 2.0.5.RELEASE
我是一名优秀的程序员,十分优秀!