我已经在这个问题上搜索了数小时,但找不到与我的情况完全相符并且有解决方案的解决方案。

我有一个现有的Cassandra数据库,但打算在不久的将来迁移到MongoDB。我正在编写带有Spring Data JPA的Spring Rest API以使用Cassandra DB,但要确保将来我可以轻松切换到Mongo,而不会遇到太多麻烦。

@Entity
@Table("stb")
public class NetworkDevice {
    @Id
    @PrimaryKeyColumn(name = "deviceid", type = PrimaryKeyType.PARTITIONED)
    private String deviceid;
// remaining fields/getters/setters/etc omitted


通用的NetworkDeviceRepository

public interface NetworkDeviceRepository {
    NetworkDevice findByDeviceid(String deviceid);
}


Cassandra存储库

public interface NetworkDeviceCassandraRepository extends NetworkDeviceRepository, CassandraRepository<NetworkDevice, String>{}


Mongo资料库

public interface NetworkDeviceMongoRepository extends NetworkDeviceRepository, MongoRepository<NetworkDevice, String> {}


当项目启动时,我遇到以下错误

Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type NetworkDevice!


似乎Spring感到困惑,正在寻找CrudRepository方法名称作为我的NetworkDevice对象上的字段,但这对我来说绝对没有意义,而且我尝试过(数小时)没有任何影响。

任何帮助将不胜感激,谢谢

最佳答案

我发现了问题。显然,Cassandra将NetworkDeviceMongoRepository标识为潜在的Cassandra存储库,因为它与NetworkDeviceCassandraRepository位于同一软件包中。

将这两个存储库移动到不同的程序包解决了此问题。

之前


> Repository Package
    + NetworkDeviceRepository.java
    + NetworkDeviceMongoRepository.java
    + NetworkDeviceCassandraRepository.java





> Repository Package
    + NetworkDeviceRepository.java
    > Mongo Package
        + NetworkDeviceMongoRepository.java
    > Cassandra Package
        + NetworkDeviceCassandraRepository.java

09-10 07:02
查看更多