在JHipster中使用Spring JPA Projection

时间:2018-06-23 15:07:09

标签: spring spring-data-jpa jhipster

我在使用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

1 个答案:

答案 0 :(得分:1)

如果要在手动查询中使用投影,则应使用与投影界面中的字段名称匹配的别名。 @Query("SELECT r.id as id, r.answer as answer FROM Research r) 或者只是跳过@Query,然后使用List<ResearchSimple> findAllSimplifiedBy();