문제

을 사용하는 것이 최대 절전 모드는 필터 하지만 내가 알지 못하는 경우 내가 무엇을 하고 싶은 가능

저는 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 은 다음과 같은 조건은 이미 적용 클래스에 대하거나 컬렉션가 onoff 스위치입니다.는 경우에 당신의 최대 절전 모드 세션에는 특정 필터를 사용하는 경우 그것의 매개변수를 설정하는 필터 on 고 모든 관련 검색어는 클래스나 컬렉션에는 이 필터를 지정은 항상 반환 필터링 결과에 따라 상태입니다.이것이 의미 없는 명시적으로 정의할 때마다 그것을 사용하여 getEnabledFilter("filterName") 할 수 있습니다 그냥을 변경하는 필터의 매개 변수다.

의 사용 예를 필터링할 수 있습이 있는 경우 Movies 테이블 Actor 와 테이블은 관계처럼, Leonardo Dicaprio 할 수 있는 많은 영화에서 동일한 시간 titanic 할 수 있는 많은 배우들이 여기 얻을 때 Actor 분명히 당신만을 원하는 것이 그 영화는 이 Actor 가 수행에 사용할 수 있도록 필터를 여기에는 적용에서의 컬렉션 Movies 에 매핑된 Actor 클래스입니다.이 방법을 얻을 때 당신 Actor 체로 말하는 것은 간단한 기준을의 이름과 다른 아무것도와 액세스 Movie 컬렉션 . 연산자 Actor 체 반환됩니다 당신은 영화는 배우 수행하고 있다.이것은 또한 방법에 상관없이 당신 Actor 체에서 데이터베이스에 액세스할 때 Movie 컬렉션 Actor 그것은 당신을 제공할 것입니다 영화는 이 배우가에서 수행

조건에서 다른 손으로 사용할 수 있습할 때 필요한 결과를 데이터베이스에서 특정 조건하지 않는 복제 할 필요가 오히려 당신은 그것을 원하지 않는 것에 복제상에서 최대 절전 모드 세션이 있습니다.아 Actor 고 말할 수 있습니다 Leonardo Dicaprio 을 포함하는 컬렉션 Movies 는 그를 지명에는 오스카.이 컬렉션만 채워지 Actor 할 때 개체를 통해 사라 특정 기준에서 사용할 수 없는 다른 Actor 체하지 않은 것에 의해 검색 기준입니다.

나는 당신이 이해의 기본 개념 필터 및 조건에서,그리고 내가 이해의 문제는 더 나을 것입하는 경우 사용할 기준!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top