【问题标题】:One-To-Many query jpql一对多查询 jpql
【发布时间】:2013-10-01 14:09:18
【问题描述】:

我是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.....

现在我应该按时间顺序获取最后一个地址。 我该怎么办?

【问题讨论】:

  • 是 Address 类有对 Place 的引用。比如@Entity public class Address{ Place place}
  • 是的,我有一个双向关联
  • 添加答案,如果你同意的话......否则评论确切的要求。

标签: java jpa jpa-2.0 jpql


【解决方案1】:
SELECT addresses.description 
FROM place p JOIN p.addresses addresses 
ORDER BY addresses.dateFrom

然后将其作为结果列表返回并获取列表中的第一项,我会说您可能可以在 T-SQL SELECT TOP 1 中这样做,但是,我不相信 JPQL 支持这一点。

【讨论】:

    【解决方案2】:

    尝试使用子查询,例如

    select a.description from place p join p.addresses a where a.dataFrom = (select max(address.dataFrom) from Address address where address.place = p)
    

    【讨论】:

      【解决方案3】:
        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 查找地址,请使用下面的地址。

        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);
        }
      

      【讨论】:

        猜你喜欢
        • 2013-06-11
        • 1970-01-01
        • 2013-09-06
        • 1970-01-01
        • 2017-11-17
        • 2011-07-29
        • 2012-06-08
        • 2020-03-26
        • 2013-06-22
        相关资源
        最近更新 更多