2009-09-24 41 views
7

Tôi có lớp này được ánh xạ dưới dạng thực thể, cho phép gọi nó là Người. Người có quan hệ nhúng/thành phần với Địa chỉ. Tôi gặp sự cố khi sử dụng Tiêu chí sẽ trả về đối tượng Địa chỉ. Tôi đã thử điều này:Truy xuất thành phần hoặc thành phần bằng cách sử dụng Tiêu chí Hibernate api

Criteria.createCriteria(Address.class) 

Không hoạt động. Tôi đoán tôi cần phải đi qua các thực thể nhưng sau đó tôi sẽ cần một số loại chiếu?

Criteria.createCriteria(Person.class).<<what goes here???>> 

Gợi ý?

Trả lời

6

Tuổi thọ của thành phần được kiểm soát bởi chủ sở hữu; họ KHÔNG được coi là hiệp hội. Do đó, bạn không thể truy lục thành phần của chính nó từ một truy vấn. Tuy nhiên, bạn có thể sử dụng nó trong tiêu chí.

Giả sử lớp "Địa chỉ" của bạn là ánh xạ là "địa chỉ" trong "Person", bạn có thể làm một cái gì đó như:

Criteria.createCriteria(Person.class) 
.add(Restrictions.eq("address.street", street)); 
+0

Ok, nhưng làm thế nào mà tôi có thể làm một HQL và lấy địa chỉ trực tiếp? Tại sao không áp dụng cho các truy vấn? – Konstantin

+0

Bởi vì HQL có khả năng mà Criteria API không có. Bây giờ, nếu bạn thực sự muốn trả lại địa chỉ của mình một cách miễn phí, bạn có thể tạo một danh sách chiếu cho các tiêu chí dựa trên Person có chứa mọi thuộc tính của Address (và không có gì khác) và áp dụng 'AliasToBeanResultTransformer' cho kết quả. Nhưng điều này là rất nhiều đau đầu và không có gì để hiển thị cho nó; Tôi muốn chọn người đầy đủ thay vào đó và trích xuất địa chỉ (nếu đó là những gì bạn cần) trong mã java. Hoặc đi với HQL. – ChssPly76

0

Đây là cách người ta có thể lấy hoặc tham khảo các tài sản của đối tượng nhúng trong hibernate.

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(
       Parent.class,"parent"); 
criteria.createAlias("embeddedObjectFieldName", "parent.embeddedObjectFieldName"); 

criteria.setProjection(Projections.projectionList() 
       .add(Projections.groupProperty("parent.propertyOne")) 
       .add(Projections.max("embeddedObjectFieldName.embeddedobjectproperty"))); 

Hope ở trên làm rõ

Các vấn đề liên quan