[英]Spring Data / Neo4J Repository : findByXXX returns Map, not Entity
我正在使用Spring Data Neo4J。
我擴展了基本的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
實例, UserNode
返回null
。
相反,我得到一個scala.collection.JavaConversions$MapWrapper
。
但是,如果我更改UserRepository
以指定類型,則一切正常(盡管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中多余的行被注釋掉的情況下運行此測試失敗。 否則,測試通過。
這是錯誤嗎? 我是否正確編寫了repo接口?
remigio是正確的,它返回一個包裝的對象,您必須將其轉換。
但是,對於不同的實體類型,使用通用的基類是不可能的。
原因如下:
您可能會認為,為帶有@MapResult
注釋的查詢結果創建包裝器類應該有效,例如。
@MapResult
public interface ResultMap<T> {
@ResultColumn("usernode") <T> getNode();
}
並在存儲庫類中像這樣使用它:
ResultMap<T> findByEntityId(Long id);
就像這樣在您的測試中:
ReultMap<UserNode> = userRepository.findByEntityId(1L);
不幸的是,這不起作用,原因有兩個:
NodeProxy
類,而不是NodeProxy
類 然后起作用的是:
@MapResult
public interface ResultMap {
@ResultColumn("usernode") NodeProxy getNode();
}
ResultMap rm = userRepository.findByEntityId(1L);
NodeProxy proxy = rm.getNode();
UserNode userNode = template.convert(proxy, UserNode.class);
template
是自動連線的,如下所示:
@Autowired Neo4jOperations template;
不幸的是,由於上述第2點,這實際上也不起作用:(
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.