我正在使用Spring Data Neo4J。Spring Data/Neo4J存儲庫:findByXXX返回地圖,而不是實體
我已經擴展了基本GraphRepository
接口,添加一個方法,如下:
/**
* Extension to the repository interface for standard Spring Data repo's that
* perform operations on graph entities that have a related RDBMS entity.
*
* @author martypitt
*
* @param <T>
*/
public interface RelatedEntityRepository<T> extends GraphRepository<T>,
RelationshipOperationsRepository<T>,CypherDslRepository<T> {
public T findByEntityId(Long id);
}
然而,我發現,這個接口的子類不按預期行爲。
public interface UserRepository extends RelatedEntityRepository<UserNode>{
}
當我打電話UserRepository.findByEntityId(1L)
,我希望得到的返回UserNode
,或null
一個實例。
取而代之,我得到一個scala.collection.JavaConversions$MapWrapper
。
但是,如果我改變UserRepository
指定類型,然後一切正常(雖然違背了基類的目的)
public interface UserRepository extends RelatedEntityRepository<UserNode>{
public UserNode findByEntityId(Long id);
}
這是一個測試:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"/graph-test-context.xml"})
@Transactional
public class UserRepositoryTests {
@Autowired
private UserRepository userRepository;
// For Bug
@Test
public void canFindByEntityId()
{
UserNode userNode = new UserNode(1L);
userRepository.save(userNode);
UserNode node = userRepository.findByEntityId(1L);
assertThat(node, notNullValue());
assertThat(node, isA(UserNode.class));
}
}
運行這個測試UserRepository中的額外行註釋失敗。 Otherwsie,測試通過。
這是一個錯誤?我是否正確編寫了repo界面?
似乎存儲庫方法正在返回* Result *對象而不是正確的類對象,您可以嘗試將* findB返回的對象yEntityId *方法將它傳遞給* Neo4jOperations *類的* convert *方法:'UserNode node = neo4jOperations.convert(userRepository.findByEntityId(1L),UserNode.class);' – remigio