Java 带有SELECT的JPA连接表
我有这样一个SQL查询:Java 带有SELECT的JPA连接表,java,sql,jpa,join,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_表中的行(名称为“”)以及该名称的最大创建日期 有没有办法在JPQL查询中复制这一点 以下是实体类的要点,非常简单: @
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_表中的行(名称为“”)以及该名称的最大创建日期
有没有办法在JPQL查询中复制这一点
以下是实体类的要点,非常简单:
@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文件中定义持久化单元。完成后,您可以继续编写如下代码:
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;
Query q=em.createQuery(“以sql语法作为字符串对象的查询”);
关于您的实体和调用的查询,您将收到一个使用
List resultOfMyQuery=q.getResultList()代码>
这只是一个简短的例子。但希望你能找到一些流行语;) 只要看看你的问题,我想你不需要另一个实体。JPA中的实体与SQL中的表相同。实体和表之间通常存在1:1的关系。您只需要知道如何使用JPQ调用查询。您需要一个实体管理器,它调用您的语句
EntityManagerFactory emf=Persistence.createEntityManagerFactory(“PersistenceUnit”);
EntityManager em=emf.createEntityManager();
您必须在pom文件或配置java文件中定义持久化单元。完成后,您可以继续编写如下代码:
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;
Query q=em.createQuery(“以sql语法作为字符串对象的查询”);
关于您的实体和调用的查询,您将收到一个使用
List resultOfMyQuery=q.getResultList()代码>
这只是一个简短的例子。但希望你能找到一些流行语;) 你的课程是什么?因为您知道JPQL是面向类/字段而不是表/列的,所以我知道这一点。老实说,我对jpa很陌生,而且我还不太熟悉jpql。实体类将是myTable,我试图连接的名称字段是字符串。也许这不是可以直接完成的事情?也许我需要另一个只返回max date和name字段的实体类?而不是尝试使用相同的实体和您的类?因为您知道JPQL是面向类/字段而不是表/列的,所以我知道这一点。老实说,我对jpa很陌生,而且我还不太熟悉jpql。实体类将是myTable,我试图连接的名称字段是字符串。也许这不是可以直接完成的事情?也许我需要另一个只返回max date和name字段的实体类?而不是尝试使用相同的实体