使用Spring Data JPA的Native select ... in()子句

时间:2013-07-29 12:24:46

标签: spring jpa spring-data spring-data-jpa

我发现使用这样一个非常常见的查询:

@Query(nativeQuery=true, value="select * from questions where id in (22,45,65,777,444)")会生成一个对象列表,而不是一个问题对象列表。

[[Ljava.lang.Object;@49fd8d8f, [Ljava.lang.Object;@2558cd3c, [Ljava.lang.Object;@690a314b]

这种情况将如何解决?

我现在该怎么办?

谢谢!

编辑:

@RooJpaRepository(domainType = Challenge.class)
public interface ChallengeRepository extends ChallengeRepositoryCustom
{
    @Query(nativeQuery=true, value="select * from questions where id in (22,45,65,777,444)")
    List<Questions> chooseRandomOldQuestions();
}

1 个答案:

答案 0 :(得分:1)

我强烈认为这与in子句无关,而是与您使用的类型无关。

您的存储库已输入Challenge域类。 Question(我想你的意思是,而不是Questions)可能不是Challenge的子类型对吗?如果是这种情况,我们不会将域类型移交给EntityManager以适应人们执行Long等投影的情况,如果我们将非托管类型移交给Question(s),则查询执行将失败查询执行。

解决方法是创建一个专用的存储库来管理{{1}}个实例(仍然不确定这是一个拼写错误或一个单独的类)应该做的伎俩。