spring-data both:自定义存储库和开箱即用的选项

时间:2017-09-25 07:38:30

标签: spring-data spring-data-mongodb spring-data-elasticsearch

我正在使用自定义Spring Data存储库实现/扩展(示例here之一)但我仍然希望使用Optionals进行基本操作 - 如下所示(Mongo或Elasticsearch的示例):

i_overlay = 1
n_bits = 8


# On (60xx,3000) are stored ovelays.
# First is (6000,3000), second (6002,3000), third (6004,3000),
# and so on.
dicom_tag1 = 0x6000 + 0*i_overlay

overlay_raw = data[0x6000,0x3000].value

# On (60xx,0010) and (60xx,0011) is stored overlay size
rows = data[0x6000,0x0010].value # rows = 512
cols = data[0x6000,0x0011].value # cols = 512

decoded_linear = np.zeros(len(overlay_raw)*n_bits)

# Decoding data. Each bit is stored as array element
for i in range(1,len(overlay_raw)):
    for k in range (0,n_bits):
        byte_as_int = overlay_raw[i]
        decoded_linear[i*n_bits + k] = (byte_as_int >> k) & 0b1


overlay = np.reshape(decoded_linear,[rows,cols])

plt.imshow(overlay)
plt.show()

无需在我的DomainRepositoryImpl类(实现DomainRepositoryCustomAnyName)中自行实现该方法。

这有可能吗?

目前我收到一个异常(与我在DomainRepositoryImpl类中实现该方法的异常相同):public interface DomainRepository extends MongoRepository<Domain, Long>, DomainRepositoryCustomAnyName { Optional<Domain> findOne(Long id); }

1 个答案:

答案 0 :(得分:3)

我认为,我遇到了同样的问题。我没有使用MongoDB而是使用PostgreSQL,但问题的原因可能是相同的。您链接到的网站上的示例不使用findOne,因此我不确定您选择的位置。很多教程都是针对2.x.x之前的spring-data版本。问题是存储库的接口和实现从1.11.8变为2.0.0,因此您的问题可能与版本问题有关。

从过去的某个地方到1.11.8,SimpleJpaRepository有一个方法

public T findOne(ID id)

并支持包装导致Optional。这适合你的代码。我测试了它,它只是一个简单的例子。当然我没有您的域对象等等。

在2.0.0中,此方法已从SimpleJpaRepository中删除,并替换为

public <S extends T> Optional<S> findOne(Example<S> example)

public Optional<T> findById(ID id)

假设您使用的是spring-data-jpa 2.x.x,则有3个选项:

  1. 切换回1.11.8版本

  2. 将方法签名更改为

    Optional<Domain> findOne(Example<Domain> ex);

  3. 请改用新方法:

    Optional<Domain> findById(Long id);