我有一个像这样的 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 中的行(其中有多个 name="")以及该名称的最大创建日期。
有没有办法在 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 文件或配置 java 文件中。完成后,您可以继续编写如下代码:
Query q = em.createQuery( "Your query in sql syntax as a string object" );
对于您的实体和调用的查询,您将收到一个列表,使用
List<object> resultOfMyQuery = q.getResultList();
这只是一个简短的示例。但希望您能找到一些流行语;)
关于java - JPA 使用 SELECT 连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39118198/