Tôi đã bốn bảng, USER, LIÊN HỆ, CONACT_TYPE, và USER_CONTACTHibernate giúp đỡ với một tiêu chí tham gia truy vấn
cửa hàng USER_CONTACT tất cả các địa chỉ liên lạc mà người dùng có bàn dân cư với dữ liệu giả như sau
USER TABLE
USER_ID(int)| FIRST_NAME(varchar(2) | LAST_NAME(varchar(2) |
------------------------------------------------------------
| 1 | TEST | USER |
------------------------------------------------------------
USER_CONTACT
USER_CONTACT_ID(int) | USER_ID(int) | CONTACT_ID(int) |
-------------------------------------------------------
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
-------------------------------------------------------
LIÊN HỆ
CONTACT_ID(int) | CONTACT_TYPE_ID(int) | CONTACT(varchar(2)|
-------------------------------------------------------------
| 1 | 2 | (555) 555-5555 |
| 2 | 2 | (555) 593-3938 |
| 3 | 1 | [email protected] |
-------------------------------------------------------------
CONTACT_TYPE
CONTACT_TYPE_ID(int) | CONTACT_TYPE |
-------------------------------------
| 1 | EMAIL |
| 2 | PHONE |
-------------------------------------
Những gì tôi đang cố gắng làm là tạo ra một truy vấn mà sẽ trở lại một danh sách có chứa chỉ CONACT_TYPE ĐIỆN THOẠI đây là chế độ ngủ đông của tôi chức năng cho đến nay
public List<UserContact> getUserContactByType(Integer userId, String contactType) {
Session session = getSessionFactory().openSession();
try {
Criteria criteria = session.createCriteria(UserContact.class, "USER_CONACT");
criteria.add(Restrictions.eq("USER_CONACT.userId, userId");
criteria.add(Restrictions.eq("USER_CONTACT.contact.contactType.contactType", contactType);
return (List<UserContact>)criteria.list();
}
}
Mỗi bảng được ánh xạ tới một lớp mô hình. Thông tin lớp quan trọng như sau.
Contact.java
Có một mối quan hệ @ManyToOne đến lớp ContactType.java
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private ContactType contactType;
UserContact.java
Có một mối quan hệ @ManyToOne đến lớp Contact.java và a @ManyToOne trên lớp User.java
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Contact contact;
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private User user;
Tất cả các lớp đều có getters và setters chuẩn cho tất cả các thuộc tính cột cho các bảng ở trên.
Tôi tiếp tục nhận được thông báo lỗi rằng nó không thể giải quyết thuộc tính contact.contactType của lớp UserContact của tôi. Bất cứ ai cũng biết làm thế nào để thực hiện đúng một cái gì đó như thế này trong hibernate?
Bạn không thể viết tiêu chí (cũng như HQL) dựa trên bảng. Bạn cần phải cho chúng tôi biết điều gì đó về các lớp học. –
Bạn đã thể hiện các liên hệ người dùng của mình dưới dạng thực thể trong ứng dụng của bạn (nhiều người đến nhiều người một chiều bằng cách sử dụng bảng tham gia). ? –
@Stefan Steinegger Tôi đã cập nhật một số thông tin về các lớp học – medium