我正在尝试获取分页顺序,按当前版本的cration日期排序(currentVersion = true)
以下是Order类:
@Entity
public class Offer extends Model {
@Id
public Long id;
....
@OneToMany(mappedBy = "offer", fetch = FetchType.EAGER)
public List<Version> versions;
...
}
这是版本类
@Entity
public class Version extends Model {
@Id
public Long id;
@ManyToOne
@JoinColumn(name = "OFFER_ID")
public Offer offer;
public Boolean currentVersion = false;
public Date creation;
...
}
以下是我在eBean文档中找到的获取代码:
Query<Offre> query = Ebean.find(Offer.class);
List<Offer> offers = query.fetch("versions")
.where()
.eq("versions.currentVersion", true)
.orderBy("versions.creation desc nulls last")
.setFirstRow(0)
.setMaxRows(10)
.findPagedList().getList();
这是预期的SQL
SELECT * FROM
(SELECT /*+ FIRST_ROWS(10) */ rownum rn_, a.* FROM
(SELECT t0.id c0,
...
t0.OPTLOCK c32
FROM offer t0
INNER JOIN version t1 on t0.id = t1.OFFER_ID
ORDER BY t1.creation
) a
WHERE rownum <= 10
) ; --bind()
这是实际的SQL
First one:
SELECT *
FROM
(SELECT
/*+ FIRST_ROWS(10) */
rownum rn_,
a.*
FROM
( SELECT DISTINCT t0.id c0,
...
t0.id
...
FROM offer t0
JOIN versions u1 ON u1.OFFER_ID = t0.id
WHERE u1.current_version = true
AND u1.current_version = true
ORDER BY t0.id
) a
WHERE rownum <= 10
) ;
Second one :
SELECT t0.OFFER_ID c0,
t0.id c1,
...
t0.creation c3,
...
t0.current_version c12,
...
t0.OFFER_ID c30,
...
FROM versions t0
WHERE (t0.OFFER_ID) IN (990,991,992,993,994,995,996,997,998,999)
ORDER BY t0.creation;
问题:我需要更改什么才能获得预期的SQL?
非常感谢您的帮助
使用的版本: ebean 7.6.1 from play 2.5.14
答案 0 :(得分:1)
我找到了一个随处:
而不是
div
我找到了:
List<Offer> offers = query.fetch("versions")
.where()
.eq("versions.currentVersion", true)
.orderBy("versions.creation desc nulls last")
.setFirstRow(0)
.setMaxRows(10)
.findPagedList().getList();
我确保offer和版本之间的连接只进行一次,而不是假设版本连接别名是u1。
至少,它正在做这份工作。
再见