繁体   English   中英

JPA-从查询中强制转换@OneToMany字段

[英]JPA - Casting @OneToMany field from Query

我有@Entity,看起来像这样

@Entity
public class Plane {

  @Id
  private Long planeid;

  @OneToMany(fetch = FetchType.LAZY, targetEntity = Passenger.class, cascade ={CascadeType.ALL}, mappedBy = "planeid")
  private List<Passenger> passengers;

...

我在扩展JPARepository的接口中使用这种方法:

@Transactional
public interface PlaneRepository extends JpaRepository<Plane, Long> {

    @Query(value = "SELECT * FROM planes p JOIN passengers v USING(planeid) WHERE v.name = 'Carlos' GROUP BY p.planeid", nativeQuery = true)
    List<Plane> findAllPlanesMatching();

}

作为此方法的结果,我获得了所有飞机对象的列表,这些乘客的乘客名称为“ Carlos”,但是在每个飞机对象内部,List包含所有乘客的列表,但我希望此列表中只有名为“ Carlos”的乘客。 有什么办法吗?

您正在混合两种模式:实体映射和本机查询映射。 您使用的本机查询不适用于实体映射。 查看以下讨论: JPA:如何将本机查询结果集转换为POJO类集合

在您的情况下,我不明白为什么无法在JPQL查询中完全使用JPA。

您需要在Passenger类中映射@ManyToOne关系

@ManyToOne
private Plane plane;

并运行以下查询:

Query q = em.createQuery("FROM Passenger p WHERE p.name = :name")
            .setParameter("name", "Carlos")
            .getResultList();

您将只获得匹配名称Carlos的乘客,并且可以访问遍历p.getPlane()的飞机。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM