Использование Spring JPA Projection с JHipster

У меня возникли трудности с использованием Прогнозы JPA Spring Data в проекте, созданном с помощью JHipster версии 4.14.5.

Я следую ориентации 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 присутствует в simpleadvised.

org.springframework.aop.framework.ProxyFactory: 2 interfaces    [br.com.pixinside.projection.ResearchSimple, org.springframework.data.projection.TargetAware]; 3 advisors [org.springframework.aop.support.DefaultPointcutAdvisor: pointcut [Pointcut.TRUE]; advice [org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor@1d62a0b], org.springframework.aop.support.DefaultPointcutAdvisor: pointcut [Pointcut.TRUE]; advice [org.springframework.data.projection.ProxyProjectionFactory$TargetAwareMethodInterceptor@3b89f41a], org.springframework.aop.support.DefaultPointcutAdvisor: pointcut [Pointcut.TRUE]; advice [org.springframework.data.projection.ProjectingMethodInterceptor@198453c9]]; targetSource [SingletonTargetSource for target object [org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap@319267ad]]; proxyTargetClass=false; optimize=false; opaque=true; exposeProxy=false; frozen=false
0
0
239
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

если вы хотите использовать проекцию с ручными запросами, вам следует использовать псевдонимы, которые соответствуют именам полей в вашем интерфейсе проекции. @Query("SELECT r.id as id, r.answer as answer FROM Research r) Или просто пропустите @Query и используйте List<ResearchSimple> findAllSimplifiedBy();

Другие вопросы по теме