2

私はhibernateとMysqldbでspringを使用しています。回答オブジェクトのセットを持つ質問オブジェクトがあります。

私のquestion.hbm.xmlは

    <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.gamesapp.model.Question" table="question" >
         <cache usage="read-write"/>
        <id name="questionId" type="java.lang.Long">
            <column name="question_id" />
            <generator class="identity" />
        </id>
        <property name="description" type="java.lang.String">
            <column name="description" length="500" not-null="true" />
        </property>
        <property name="difficultyLevel" type="java.lang.String">
            <column name="difficulty_level" length="6" not-null="true" />
        </property>
        <property name="isMixer" type="java.lang.String">
            <column name="is_mixer" length="5" not-null="true" />
        </property>
        <property name="status" type="java.lang.String">
            <column name="status" length="7" not-null="true" />
        </property>
        <set name="answers"  inverse="true"   >
         <cache usage="read-write"/>
            <key>
                <column name="question_id" not-null="true" />
            </key>
            <one-to-many class="com.gamesapp.model.Answer" />
        </set>

        <set name="questionAnswerUsers"  inverse="true" >
         <cache usage="read-write"/>
            <key>
                <column name="question_id" not-null="true" />
            </key>
            <one-to-many class="com.gamesapp.model.QuestionAnswerUser" />
        </set>
    </class>
</hibernate-mapping>

私のanswer.hbm.xmlは

    <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.gamesapp.model.Answer" table="answer" >
       <cache usage="read-write"/>
        <id name="answerId" type="java.lang.Long">
            <column name="answer_id" />
            <generator class="identity" />
        </id>
        <many-to-one name="question" class="com.gamesapp.model.Question" fetch="select">
            <column name="question_id" not-null="true" />
        </many-to-one>
        <property name="description" type="java.lang.String">
            <column name="description" length="100" not-null="true" />
        </property>
        <property name="dragPosition" type="java.lang.Short">
            <column name="drag_position" />
        </property>
        <property name="orderSequence" type="java.lang.Integer">
            <column name="order_sequence" not-null="true" />
        </property>
        <property name="isAnswer" type="java.lang.String">
            <column name="is_answer" length="5" not-null="true" />
        </property>

        <property name="askPercentage" type="java.lang.Double">
            <column name="ask_percentage"  not-null="true" />
        </property>
        <set name="questionAnswerUsers"  inverse="true">
           <cache usage="read-write"/>
            <key>
                <column name="answer_id" not-null="true" />
            </key>
            <one-to-many class="com.gamesapp.model.QuestionAnswerUser" />
        </set>
    </class>
</hibernate-mapping>

今私の問題は、質問のリストをランダムな順序で取得したいということです。また、すべてのQuestionオブジェクトについて、休止状態の基準を使用して回答のセットを取得したいので、回答セットもランダムに初期化する必要があります。

たとえば、QuestionオブジェクトquestionOneには、4つのAnswerオブジェクトを持つ一連の回答があります。たとえば、ans1、ans2、ans3、ans4です。これで、初めてquestionOneをフェッチするときは、回答セットをanswer = {ans1、ans2、ans3、ans4}として初期化する必要があります。2回目にquestionOneオブジェクトをフェッチするときは、回答セットをanswer = {ans4、ans2、ans3、ans1}として取得する必要があります。

質問のリストはランダムに初期化されるはずです。これまでのQuestion'sAnswerセットは、休止状態の基準を使用して熱心にフェッチする必要があります。そのアイテムは毎回シャッフルされる必要があります。

前もって感謝します。

4

1 に答える 1

3

Collections.shuffle()シャッフルされたリストを取得するために使用するだけです。

List<Question> questions = em.createQuery(...).getResultList();
Collections.shuffle(questions);

そして、Questionエンティティでは:

public List<Answer> getShuffledAnswers() {
    List<Answer> result = new ArrayList<Answer>(this.answers);
    Collections.shuffle(result);
    return result;
}
于 2013-01-04T07:27:29.580 に答える