【发布时间】:2013-07-19 03:02:30
【问题描述】:
我正在使用 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 的单个实例返回,或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 中的额外行运行此测试失败。否则,测试通过。
这是一个错误吗?我的repo接口写对了吗?
【问题讨论】:
-
似乎存储库方法正在返回一个 Result 对象而不是正确的类对象。您可以尝试将 findByEntityId 方法返回的对象转换为 Neo4jOperations 类的 convert 方法:
UserNode node = neo4jOperations.convert(userRepository.findByEntityId(1L), UserNode.class);
标签: java spring-data spring-data-neo4j