1

次のコードを使用してデータを取得しています

Criteria cr = session.createCriteria( JobProcess.class );
cr.createAlias("sendMarcs", "sm");
cr.addOrder( Order.desc( "processedTime") );
cr.addOrder( Order.asc( "sm.ats" ) );

すべてのデータを返しますが、すべてのデータが複数回表示され、 size673のリストであるべきときにsize のリストを返します99。なぜそれが起こっているのか分かりません。

はい、休止状態が使用している SQL を確認しましたが、正しいです。

また、エイリアスとその順序を削除すると、データは期待どおりに表示されます。乗算されていませんが、ソートされていません。

JobProcess.java

@Entity
@Table(name = "jobprocess")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class JobProcess {

    @Id
    @GeneratedValue
    private Long id;

    @Basic(optional = false)
    @Column(length = 20, name="customerid")
    private String customerId;

    @Basic(optional=false)
    @Column(length = 100)
    private String ATS;

    @Basic(optional=true)
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="timeprocessed")
    private java.util.Date processedTime;

    @Basic(optional=false)
    @Column(length = 1)
    private String state;

    @Column(length = 300)
    private String notes;

    @Basic(optional = false)
    private long nos;

    @OneToMany(mappedBy = "jobprocessid")
    private Set<SendMarc> sendMarcs = new HashSet<SendMarc>();

    // getters and setters
}

SendMarc.java

@Entity
@Table( name = "sendmarc" )
@Cache( usage = CacheConcurrencyStrategy.READ_WRITE )
public class SendMarc
{
    @Id
    @GeneratedValue
    private BigInteger id;

    @Basic( optional = true )
    private BigInteger marcfileid;

    @Basic( optional = false )
    private long jobprocessid;

    @Basic( optional = false )
    @Column( length = 50 )
    private String ats;

    // getters and setters
}
4

2 に答える 2

2

個別のない HQL クエリが行うように、取得した行ごとに 1 つのオブジェクトを返します。基準とともに、使用する必要があります

cr.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
于 2013-01-04T23:14:45.667 に答える
0

#createAlias()参加した関連付けのエイリアスを作成します。あなたの場合、JobProcess結合なしでテーブルからすべての行を取得するだけで、追加の結合の場合は異なる結果が得られます。

于 2013-01-04T23:16:58.930 に答える