Hibernate 필터 엔티티가 oneToMany 관계 개체를 포함하고 있습니다.
-
21-12-2019 - |
문제
을 사용하는 것이 최대 절전 모드는 필터 하지만 내가 알지 못하는 경우 내가 무엇을 하고 싶은 가능
저는 2 체:
메시지와 MessageUser.
메일 목록의 MessageUser.
내가 원하는 필터를 만들 수 있도록 다음과 같은 것:
final Session filteredSession = sessionFactory.openSession();
final Filter filter = filteredSession.enableFilter("userRecipient");
filter.setParameter("userRecipient", myUser);
filter.validate();
final List<Message> userMessages = filteredSession.createQuery("from Message").list();
그만 메시지가 어디 myUser 받는 사람?
은 그것을 가능하게 하는 방법?
많은 감사!
해결책
당신은 편안 경우 조건을 만들 수 있는 기준은 다음과 같이
Session hbSession= sessionFactory.openSession();
Criteria criteria = hbSession.createCriteria(Message.class);
criteria.createCriteria("msgUserList","userListAlias");// msgUserList is variable name of users list in Message
criteria.add(Restrictions.eq("userListAlias.user",myUser));//user is variable for User type in msgUserList's class.
List<Message> userMessages = criteria.list();
보 이 에 대한 참조를 만드는 동안 조건!
하려면 필터를 사용한 다음 희망 구성에 필터 User
List
어떤 것처럼 울 부 짖는 소리
By*.hbm.xml
<hibernate-mapping package="com....">
<class name="Message" table="message_table">
....
<list name="msgUserList" inverse="true" cascade="all">
<key column="user_id" />
<one-to-many class="MessageUsers" />
<filter name="userRecipient" condition="user_id =:userParam" />
</list>
</class>
<filter-def name="userRecipient">
<filter-param name="userParam" type="User" />//User is class
</filter-def>
</hibernate-mapping>
또는 주석
@Entity
@FilterDef(name="userRecipient",
parameters=@ParamDef(name="userParam", type="PAKAGE.User" ))
@Table(name = "message_table", catalog = "your_db")
public class Message{
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "stock")
@Filter(name = "userRecipient",condition="user = :userParam")
public List<MessageUser> msgUserList;
이 후 수 있을 것입의 필터 작업
Filter filter = session.enableFilter("userRecipient");
filter.setParameter("userParam", myUser);
업데이트
목 Filter
이 아닌 다른 Criteria
, 에서 내가 이해할 수 있는 것을 말 Filter
은 다음과 같은 조건은 이미 적용 클래스에 대하거나 컬렉션가 on
고 off
스위치입니다.는 경우에 당신의 최대 절전 모드 세션에는 특정 필터를 사용하는 경우 그것의 매개변수를 설정하는 필터 on
고 모든 관련 검색어는 클래스나 컬렉션에는 이 필터를 지정은 항상 반환 필터링 결과에 따라 상태입니다.이것이 의미 없는 명시적으로 정의할 때마다 그것을 사용하여 getEnabledFilter("filterName")
할 수 있습니다 그냥을 변경하는 필터의 매개 변수다.
의 사용 예를 필터링할 수 있습이 있는 경우 Movies
테이블 Actor
와 테이블은 관계처럼, Leonardo Dicaprio
할 수 있는 많은 영화에서 동일한 시간 titanic
할 수 있는 많은 배우들이 여기 얻을 때 Actor
분명히 당신만을 원하는 것이 그 영화는 이 Actor
가 수행에 사용할 수 있도록 필터를 여기에는 적용에서의 컬렉션 Movies
에 매핑된 Actor
클래스입니다.이 방법을 얻을 때 당신 Actor
체로 말하는 것은 간단한 기준을의 이름과 다른 아무것도와 액세스 Movie
컬렉션 .
연산자 Actor
체 반환됩니다 당신은 영화는 배우 수행하고 있다.이것은 또한 방법에 상관없이 당신 Actor
체에서 데이터베이스에 액세스할 때 Movie
컬렉션 Actor
그것은 당신을 제공할 것입니다 영화는 이 배우가에서 수행
조건에서 다른 손으로 사용할 수 있습할 때 필요한 결과를 데이터베이스에서 특정 조건하지 않는 복제 할 필요가 오히려 당신은 그것을 원하지 않는 것에 복제상에서 최대 절전 모드 세션이 있습니다.아 Actor
고 말할 수 있습니다 Leonardo Dicaprio
을 포함하는 컬렉션 Movies
는 그를 지명에는 오스카.이 컬렉션만 채워지 Actor
할 때 개체를 통해 사라 특정 기준에서 사용할 수 없는 다른 Actor
체하지 않은 것에 의해 검색 기준입니다.
나는 당신이 이해의 기본 개념 필터 및 조건에서,그리고 내가 이해의 문제는 더 나을 것입하는 경우 사용할 기준!