3
我想在實體上的屬性的內容進行搜索Hibernate的標準:由財產清單上的內容搜索中的實體
我有一個簡單的類來定義用戶:
@Entity
public class User {
@Id
@Column(name = "pers_id")
private int persId;
@Column(name = "full_name")
private String fullName;
@OneToMany
@JoinColumn(name = "PERS_ID")
private List<UserLanguages> languages = new ArrayList<UserLanguages>();
}
一用戶可以有多種語言,這裏是用戶和語言之間的鏈接。
@Entity
public class UserLanguages {
@Column(name="pers_id")
private int persId;
@Id
@Column(name="lang_iso_code")
private String langISO;
@Column(name="lang_full_name")
private String langFullName;
@Column(name="order_seq")
private int order;
}
@Entity
public class Language {
@Id
@Column(name="ID")
private long id;
@Column(name = "CODE")
private String code;
}
我創建了一個對象做搜索:
public class UserFilter {
private String name;
private List<Language> languages;
}
我已經定義了一個服務:
@Service("userService")
public class UserServiceImpl implements UserService {
@Override
public List<User> findByFilter(UserFilter userFilter) {
final Criteria criteria = userDao.createCriteria();
if (userFilter.getName() != null) {
for (final String token : userFilter.getName().toLowerCase().trim().split(" ")) {
criteria.add(Restrictions.like("fullName", "%" + token + "%"));
}
}
if (null != userFilter.getLanguages() && userFilter.getLanguages().size() > 0) {
final List<String> contents = new ArrayList<String>(userFilter.getLanguages().size());
for (final Language lang : userFilter.getLanguages()) {
contents.add(lang.getCode());
}
criteria.add(Restrictions.in("languages", contents));
}
return userDao.findByCriteria(criteria);
}
我的問題是我怎麼能對語言進行搜索。我想用userFilter參數中定義的這個或全部語言來查找所有用戶。 有關語言的部分在服務中的findByFilter方法中不起作用。你可以幫我嗎?
好的謝謝。我已經將UserLanguages更改爲UserLanguage,您是對的。現在,我使用了ManyToOne關係。但我不明白從哪裏來的language.langIso在最後的限制? – BasicCoder 2011-02-23 11:40:09
對不起。我忘記了雙引號和用戶前綴。我更新了我的答案。 – 2011-02-23 12:35:05