繁体   English   中英

JPA使用SELECT连接表

[英]JPA Join table with SELECT

我有这样的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

}

只是阅读你的问题,我想你不需要另一个实体。 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使用

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

这只是一个简短的例子。 但希望你有一些流行语要找;)

暂无
暂无

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

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