Làm cách nào tôi có thể viết truy vấn Tiêu chí Hibernate, cho một siêu lớp và kiểm tra một lớp con nhất định? Hãy tưởng tượng chúng ta có các lớp sau tất cả các ánh xạ lên với Hibernate-JPA:Làm thế nào tôi có thể viết truy vấn Tiêu chí Hibernate, cho một siêu lớp và kiểm tra một lớp con nhất định?
@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 {
}
Khi viết một truy vấn Tiêu chuẩn như thế này, tôi muốn, cho hiệu suất, sử dụng một trái tham gia với sub-class:
getSession()
.createCriteria(Bar.class)
.createAlias("Foo", "foo", CriteriaSpecification.LEFT_JOIN)
.add(Restrictions.isNotNull("foo.bar_id"))
.list();
Điều này không thành công, vì đường dẫn kết hợp "Foo" không hoạt động rõ ràng, nhưng nó sẽ minh họa những gì tôi muốn. Hoặc có cách nào khác để thực hiện loại truy vấn này không? Tôi cần truy vấn được thực hiện trên lớp cha. Nếu tôi đã có thể làm điều đó trong SQL nó sẽ trông như thế này:
select b.*
from bar b left join foo f on f.bar_id = b.id
where f.bar_id is not null;
Truy vấn SQL trên là chỉ để minh họa những gì tôi muốn nói, tôi biết nó sẽ được dễ dàng hơn để sử dụng một "bình thường" tham gia trong đó trường hợp cụ thể .
Có, tôi biết về Truy vấn SQL, nó chỉ minh họa điểm và làm sáng tỏ câu hỏi. Truy vấn của tôi là IRL phức tạp hơn nhiều. Tuy nhiên, thêm một hạn chế cho thuộc tính lớp hoạt động hoàn hảo. Khá logic khi bạn nghĩ về nó, cảm ơn. – crunchdog
'Restrictions.eq (" bar.class ", Foo.class))' là những gì tôi đang tìm kiếm - cảm ơn! – jlb