簡體   English   中英

休眠條件未填充關聯

[英]Hibernate criteria not populating associations

我正在使用休眠標准api獲取txn和txn_products表的數據。 下面是映射。

Txn類:

@Entity
@DynamicUpdate(value=true)
@Table(name="txn")
public class Txn
{
 @OneToMany(fetch=FetchType.LAZY , mappedBy = "transaction" , cascade = CascadeType.ALL)
    Set<TxnProduct> txnProducts = null;

    @Id
    @Column(name="id" , nullable=false)
    private String id;

......
}

TxnProduct類:

@Entity
@DynamicUpdate(true)
@Table(name="txn_product")
public class TxnProduct
{

 @Id
    @Column(name="id" , nullable=false)
    private String id;

  @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="txn_id")
    private Txn transaction ;
.....
}

商業邏輯 :

   Session sx = .......... ;
      Criteria Q = sx.createCriteria(Txn.class, "txn");
              Q.createAlias("txn.txnProducts", "txnProducts" , JoinType.INNER_JOIN);

                List<Txn> L = (List<Txn>) Q.list();


                logger.info(L) ;

                for(Txn T : L)
                {
                    logger.info(T);
                    logger.info(T.getTxnProducts());
                }

       sx.close();

在執行業務邏輯List L時,為數據庫中的每個TxnProduct返回Txn對象,但是我從休眠標准中期望的是為txn表中的每一行返回Txn對象,並在其中設置Set<TxnProduct>

我嘗試了Q.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 但這沒有幫助。 謝謝。

Q.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 除非我們對諸如setFirstResultsetMaxResult類的父實體使用分頁,否則它應該在大多數情況下都可以工作。 JoinTypeFetchMode可能存在一些問題。

不考慮任何獲取模式,用Set包裹q.list()會是更好的選擇。 類似於Set<Txn> resutls = new HashSet<Txn>(L)); 或者,如果您想再次返回列表,請使用列表List<Txn> results = new ArrayList<Txn>(new HashSet<Txn>(L));集包裝起來List<Txn> results = new ArrayList<Txn>(new HashSet<Txn>(L));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM