我有一个像这样的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
}
答案 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();
这只是一个简短的例子。但希望你有一些流行语可供选择;)