【问题标题】:JPQL Joint tableJPQL 连接表
【发布时间】:2016-03-10 17:54:42
【问题描述】:

我有一个合作者和干预表。

协作者(Id 协作,协作名称,地址协作) Intervention(id_Interv, Nom_Interv, End_date, Id_collab)(“实体响应包含协作者类型对象)

@Entity
public class Collaborateur implements Serializable {

   private static final long serialVersionUID = 1L;
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Long idcollaborateur;
   private String nomCollaborateur;
   ...
}

和

@Entity
public class Intervention implements Serializable{
   private static final long serialVersionUID = 1L;

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Long idInterv;
   @Temporal(TemporalType.DATE)
   private Date dateEndInterv;
   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "idCollaborateur")
   private Collaborateur collaborateur;
   ...
 }

我如何选择所有协作者(列表)目前没有任何干预.. 即没有干预的协作者或者他们所有干预的dateEndInterv小于datetimenow

我希望已经清楚了,我的作文:

SELECT c
FROM Collaborateur c LEFT JOIN c.Intervention i
WHERE (i.dateFinIntervention<?1 or i.dateFinIntervention IS NULL)

我研究过弹簧数据

【问题讨论】:

    标签: java sql jpa spring-data jpql


    【解决方案1】:

    您需要在 Collaborateur 和 Intervention 之间建立新的关系,例如 @OneToMany:

    @Entity
    public class Collaborateur implements Serializable {
    
       private static final long serialVersionUID = 1L;
       @Id
       @GeneratedValue(strategy = GenerationType.IDENTITY)
       private Long idcollaborateur;
       private String nomCollaborateur;
    
       @OneToMany
       private Set<Intervention> interventions;
       ...
    }
    

    因此,您的 JPQL 将是:

    SELECT c
    FROM Collaborateur c 
    LEFT JOIN c.interventions i
    WHERE (i.dateEndInterv < ?1 OR i.dateEndInterv IS NULL)
    

    【讨论】:

      猜你喜欢
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      • 2016-05-13
      • 2014-11-22
      • 2018-10-01
      • 2018-07-06
      相关资源
      最近更新 更多