我在使用Spring Data JPA Projections版本4.14.5生成的项目中使用JHipster时遇到一些困难。
我遵循Spring关于如何使用JPA储存库进行投影的方向,但是我没有取得任何成功。当我尝试使用投影时,存储库为我提供null
值。
由于我不是JHipster烟斗的大鉴赏家,所以我希望那里的人可以帮助我。 我的实体
@Entity
@Table(name = "research")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Research implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Column(name = "answer", nullable = false)
private String answer;
@OneToOne(optional = false)
@NotNull
@JoinColumn()
private Question question;
// getters and setters
实体投影:
public interface ResearchSimple {
Long getId();
String getAnswer();
}
实体的仓库:
@Repository
public interface ResearchRepository
extends JpaRepository<Research, Long> {
@Query("SELECT r FROM Research r)
List<ResearchSimple> findAllAsSimple();
}
测试结果
List<ResearchSimple> result = repo.findAllAsSimple();
assertEquals(result.size, dbSize); // OK
ResearchSimple simple = result.get(0);
assertNotNull(simple); // OK
assertNotNull(simple.getId); // FAIL!
assertNotNull(simple.getAnswer); // FAIL!
调试simple
中获得的值我已经注意到进行了投影,但是无法访问它的值。请注意,br.com.pixinside.projection.ResearchSimple
的{{1}}中存在类simple
。
advised
答案 0 :(得分:1)
如果要在手动查询中使用投影,则应使用与投影界面中的字段名称匹配的别名。 @Query("SELECT r.id as id, r.answer as answer FROM Research r)
或者只是跳过@Query,然后使用List<ResearchSimple> findAllSimplifiedBy();