簡體   English   中英

一對多查詢jpql

[英]One-To-Many query jpql

我是jpql的新手,並且遇到以下情況。

我有兩個實體Place和address。

@Entity
public class Place{


   @OneToMany
   private List<Address> addresses;

   ....
}

 @Entity
 public class Address{

   String description; 

   Date dataFrom;

   Date dataTo;

   @ManyToOne
   private Place place;


   ....
}

我想獲取最后一個地址的描述。 我正在嘗試這樣做:

select a.description from place p join p.addresses a.....

現在我應該按時間順序獲取最后一個地址。 我能怎么做?

SELECT addresses.description 
FROM place p JOIN p.addresses addresses 
ORDER BY addresses.dateFrom

然后將其作為resultList返回並獲得列表中的第一項,我想您也許可以像在T-SQL SELECT TOP 1 ,但是,我不相信JPQL支持這一點。

嘗試使用子查詢,例如

select a.description from place p join p.addresses a where a.dataFrom = (select max(address.dataFrom) from Address address where address.place = p)
  Criteria criteria = session.createCriteria(Place.class, "place"); 
  criteria.createAlias("place.addresses", "addresses")
  criteria.add(Order.desc("addresses.dataFrom"));
  criteria.setProjection(Projections.property("addresses"));

  List<Address> addresses = criteria.list();

  for (Address address : addresses) {
       System.out.println(address.description);
  }

如果要根據位置ID查找地址,請在下面使用1。

  Criteria criteria = session.createCriteria(Place.class, "place"); 
  criteria.add(Restrictions.eq("place.id", put the place id here);
  criteria.createAlias("place.addresses", "addresses")
  criteria.add(Order.desc("addresses.dataFrom"));
  criteria.setProjection(Projections.property("addresses"));

  List<Address> addresses = criteria.list();

  for (Address address : addresses) {
       System.out.println(address.description);
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM