如何編寫Hibernate Criteria查詢,查找超類,並檢查某個子類?讓我們想象一下,我們有以下的類都映射了與Hibernate,JPA:如何編寫Hibernate Criteria查詢,查找超類,並檢查某個子類?
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Bar {
@Id
@Column(name = "id")
private Long id;
}
@Entity
@PrimaryKeyJoinColumn(name="bar_id")
public class Foo extends Bar {
}
@Entity
@PrimaryKeyJoinColumn(name="bar_id")
public class Goo extends Bar {
}
當編寫一個標準查詢這個樣子,我想,性能,使用左聯接與子類:
getSession()
.createCriteria(Bar.class)
.createAlias("Foo", "foo", CriteriaSpecification.LEFT_JOIN)
.add(Restrictions.isNotNull("foo.bar_id"))
.list();
這會失敗,因爲關聯路徑「Foo」顯然不起作用,但它會說明我想要的。或者有另一種做這種查詢的方法嗎?我需要查詢在超類上執行。如果我想在SQL已經做到了它應該是這樣的:
select b.*
from bar b left join foo f on f.bar_id = b.id
where f.bar_id is not null;
SQL查詢以上只是爲了說明我的意思,我知道這將是更容易使用一個「正常」的加入在特定情況下, 。
是的,我知道的SQL查詢,這只是爲了說明問題並澄清問題。我的查詢更復雜的IRL。但是,爲類屬性添加限制完美地起作用。相當邏輯,當你想到它,謝謝。 – crunchdog
'Restrictions.eq(「bar.class」,Foo.class))'是我正在尋找的 - 謝謝! – jlb