JPA使用SELECT连接表

时间:2016-08-24 08:29:33

标签: java sql jpa join

我有一个像这样的SQL查询:

SELECT h.name, h.created_date,  tbl.*
FROM my_table tbl
  LEFT JOIN
  (SELECT name, max(created_date) created_date FROM my_table GROUP BY name) h
  ON tbl.name = h.name;

它返回my_table中的行(其中有多个名称为"")以及该名称的最大created_date。

有没有办法在JPQL查询中复制它?

以下是Entity类的要点,它非常简单:

@Entity
@Table(name = "MY_TABLE")
@XmlRootElement
public class MyTable implements Serializable {


  private BigDecimal tableId;
  private String name;
  private Date createdDate;

  // ...

  @Id
  @Basic(optional = false)
  @Column(name = "TABLE_ID")
  @GeneratedValue(generator = "TBL_ID_SEQ")
  public BigDecimal getTableId() {
    return tableId;
  }

  @Basic(optional = false)
  @Column(name = "NAME")
  public String getName() {
    return name;
  }

  @Basic(optional = false)
  @Column(name = "CREATED_DATE", insertable = false)
  @Temporal(TemporalType.TIMESTAMP)
  public Date getCreatedDate() {
    return createdDate;
  }

  // ... getters/setters

}

1 个答案:

答案 0 :(得分:0)

只是阅读你的问题,我想你不需要另一个实体。 JPA中的实体与SQL中的表相同。通常,实体和表之间存在1:1的关系。您只需要知道如何使用JPQ调用查询。您需要一个实体管理器来调用您的语句。

EntityManagerFactory emf = Persistence.createEntityManagerFactory("PersistenceUnit"); EntityManager em = emf.createEntityManager();

您必须定义持久性单元,即在pom文件或config java文件中。所以你可以继续编写这样的代码:

Query q = em.createQuery( "Your query in sql syntax as a string object" );

对于您的实体和调用的查询,您将收到使用

的列表

List<object> resultOfMyQuery = q.getResultList();

这只是一个简短的例子。但希望你有一些流行语可供选择;)