Java 休眠条件不填充关联

Java 休眠条件不填充关联,java,hibernate,hibernate-mapping,Java,Hibernate,Hibernate Mapping,我正在使用hibernate criteria api获取txn和txn_产品表的数据。 下面是地图 Txn类: @Entity @DynamicUpdate(value=true) @Table(name="txn") public class Txn { @OneToMany(fetch=FetchType.LAZY , mappedBy = "transaction" , cascade = CascadeType.ALL) Set<TxnProduct> txnPr

我正在使用hibernate criteria api获取txn和txn_产品表的数据。 下面是地图

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;

......
}
业务逻辑:

   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();
会话sx=;
标准Q=sx.createCriteria(Txn.class,“Txn”);
Q.createAlias(“txn.txn产品”、“txn产品”、JoinType.INNER\u JOIN);
List L=(List)Q.List();
日志信息(L);
用于(Txn T:L)
{
logger.info(T);
logger.info(T.getTxnProducts());
}
sx.close();
执行业务逻辑时,L为数据库中的每个
Txn产品
返回
Txn
对象,但我希望从hibernate条件中得到的是为Txn表中的每一行返回
Txn
对象,并在其中设置
set

我尝试了
Q.setResultTransformer(Criteria.DISTINCT\u ROOT\u ENTITY)但它没有帮助。

谢谢。

Q.setResultTransformer(Criteria.DISTINCT\u ROOT\u ENTITY)
应该在大多数情况下都有效,除非我们对父实体使用分页,如
setFirstResult
setMaxResult
JoinType
FetchMode
可能存在一些问题

使用
Set
包装
q.list()
将是更好的选择,无论采用何种提取模式。差不多
Set resutls=newhashset(L))或如果要再次返回列表,请使用列表包装集合
List results=newarraylist(newhashset(L))

   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();