java - JPA 使用 SELECT 连接表

标签 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 中的行(其中有多个 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/

相关文章:

java - 如何扫描hbase中的数字范围

将路径解析为多个可选组的 Java 正则表达式

Java Date toInstant 方法返回不同的日期?

sql - 结合两个查询postgres的结果

mysql - 在 MySQL 中使用 CASE/WHEN 的奇怪行为

java - 如何替换java字符串中的unicode字符

mysql - 活跃且有帖子或文章的用户

java - 使用 JPA 和 Hibernate 时如何解决 LazyInitializationException

java - Hibernate原生查询方法

java - Hibernate/Jpa OneToMany 无法正确检索数据