它可以構建標準查詢這個SQL:Hibernate Criterai API。 JOIN的
SELECT P.This FROM Position P INNER JOIN PersonOnPosition PP ON PP.Tail = P.This WHERE PP.Tail IS NOT NULL
我想端口休眠標準自定義SQL方言(定製ECM框架),但我有麻煩與JOIN
」。
謝謝。
它可以構建標準查詢這個SQL:Hibernate Criterai API。 JOIN的
SELECT P.This FROM Position P INNER JOIN PersonOnPosition PP ON PP.Tail = P.This WHERE PP.Tail IS NOT NULL
我想端口休眠標準自定義SQL方言(定製ECM框架),但我有麻煩與JOIN
」。
謝謝。
正如@Julien Langlois指出的,這取決於您的實體定義。
假設你這樣定義
@Entity
class PersonOnPosition {
@ManyToOne
@JoinColumn(name="Tail")
Position position;
}
的關係可以用
session.createCriteria(PersonOnPosition.class, "PP")
.createAlias("position", "P")
.setProjection(Property.forName("P.This"))
.add(Property.forName("PP.position").isNotNull())
.list();
go如果沒有定義的關係,你可以使用子查詢得到同樣的結果:
DetachedCriteria personOnPositionWithTail = DetachedCriteria.forClass(PersonOnPosition.class, "PP")
.setProjection(Property.forName("PP.Tail"))
.add(Property.forName("PP.Tail").isNotNull());
session.createCriteria(Position.class, "P")
.setProjection(Property.forName("P.This"))
.add(Property.forName("P.This").in(personOnPositionWithTail))
.list();
這可能是一個誤導性的迴應。如果他的實體有適當的關聯定義,他只需要添加標準。查看[標準查詢關聯](http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/querycriteria.html#querycriteria- association)。子查詢可能性能較差。 – 2013-04-26 17:18:05
@JulienLanglois是的,你是對的。我的印象是,如果定義了一個關係的話,如何定義查詢是明確的(對提問者) - 但情況可能並非如此。所以我添加了「明顯」的方法。謝謝! – skirsch 2013-04-26 18:47:21
@JulienLanglois我期待這種問題:)我沒有嘗試任何東西。我構建了Hibernate Criteria API的自定義實現(用於定製ECM框架)。所以我移植了Hibernate Criteria的大部分功能,但是'JOIN'的 – MyTitle 2013-04-26 15:10:01
有問題所以你還沒有構建實體呢?我建議先做那些,然後看看你有多遠。 – david99world 2013-04-26 15:14:07