Java 一对多查询jpql

Java 一对多查询jpql,java,jpa,jpa-2.0,jpql,Java,Jpa,Jpa 2.0,Jpql,我是jpql的新手,我有以下情况 我有两个实体:地点和地址 @Entity public class Place{ @OneToMany private List<Address> addresses; .... } @Entity public class Address{ String description; Date dataFrom; Date dataTo; @ManyToOne private Pla

我是jpql的新手,我有以下情况

我有两个实体:地点和地址

@Entity
public class Place{


   @OneToMany
   private List<Address> addresses;

   ....
}

 @Entity
 public class Address{

   String description; 

   Date dataFrom;

   Date dataTo;

   @ManyToOne
   private Place place;


   ....
}
现在我应该按时间顺序得到最后一个地址。 我该怎么办

SELECT addresses.description 
FROM place p JOIN p.addresses addresses 
ORDER BY addresses.dateFrom
然后将其作为结果列表返回,并获取列表中的第一项,我想说您可能可以像T-SQL
SELECT TOP 1
中那样操作,但是,我认为JPQL不支持这一点

  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);
  }
然后将其作为结果列表返回并获取列表上的第一项,我想说您可能可以像T-SQL中的一样选择Top1,但是,我不相信JPQL支持这一点。

Criteria=session.createCriteria(Place.class,“Place”);
  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);
  }
criteria.createAlias(“place.addresses”、“addresses”) 添加(Order.desc(“address.dataFrom”); 标准.setProjection(Projections.property(“addresses”)); 列表地址=criteria.List(); 收件人(地址:地址){ System.out.println(地址.说明); }
如果您想根据地点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);
  }
Criteria=session.createCriteria(Place.class,“Place”);
添加(Restrictions.eq(“place.id”),将place id放在这里);
criteria.createAlias(“place.addresses”、“addresses”)
添加(Order.desc(“address.dataFrom”);
标准.setProjection(Projections.property(“addresses”));
列表地址=criteria.List();
收件人(地址:地址){
System.out.println(地址.说明);
}
标准=session.createCriteria(Place.class,“Place”);
criteria.createAlias(“place.addresses”、“addresses”)
添加(Order.desc(“address.dataFrom”);
标准.setProjection(Projections.property(“addresses”));
列表地址=criteria.List();
收件人(地址:地址){
System.out.println(地址.说明);
}
如果您想根据地点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);
  }
Criteria=session.createCriteria(Place.class,“Place”);
添加(Restrictions.eq(“place.id”),将place id放在这里);
criteria.createAlias(“place.addresses”、“addresses”)
添加(Order.desc(“address.dataFrom”);
标准.setProjection(Projections.property(“addresses”));
列表地址=criteria.List();
收件人(地址:地址){
System.out.println(地址.说明);
}

尝试使用子查询,例如

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

尝试使用子查询,例如

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

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