엔티티의 속성 목록 내용으로 검색최대 절전 모드 기준 : 내가 엔티티에 속성을 내용으로 검색 할
나는 사용자 정의 할 수있는 간단한 클래스가 :
@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 param에 정의 된 언어를 가진 모든 사용자를 찾고 싶습니다. 언어에 관한 부분이 서비스의 findByFilter 메소드에서 작동하지 않습니다. 나 좀 도와 줄 수있어?
: 당신은 조인을 사용한다 감사합니다. UserLanguages를 UserLanguage로 변경했습니다. 이제, ManyToOne 관계를 사용했습니다. 하지만 언어가 어디에서 왔는지 이해하지 못합니다. 마지막 제한에 있습니까? – BasicCoder
죄송합니다. 큰 따옴표와 사용자 접두사를 잊어 버렸습니다. 나는 나의 대답을 업데이트했다. –