Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate、Criteria、Projection、Transformer.aliasToBean和List<;T>;问题_Java_Hibernate_Entity_Criteria_Projection - Fatal编程技术网

Java Hibernate、Criteria、Projection、Transformer.aliasToBean和List<;T>;问题

Java Hibernate、Criteria、Projection、Transformer.aliasToBean和List<;T>;问题,java,hibernate,entity,criteria,projection,Java,Hibernate,Entity,Criteria,Projection,我想选择一个具有一些已确定字段的实体。其他字段允许为空。 我的问题 EntA参考了EntB和EntC列表 冬眠: /*条件查询*/select 此id为y0, 此id为y1 从…起 恩塔这个_ java.lang.ArrayIndexOutOfBoundsException:1 位于org.hibernate.loader.criteria.CriteriaLoader.getResultRow(CriteriaLoader.java:168) 位于org.hibernate.loader.C

我想选择一个具有一些已确定字段的实体。其他字段允许为空。 我的问题

EntA参考了EntB和EntC列表


冬眠: /*条件查询*/select 此id为y0, 此id为y1 从…起 恩塔这个_ java.lang.ArrayIndexOutOfBoundsException:1 位于org.hibernate.loader.criteria.CriteriaLoader.getResultRow(CriteriaLoader.java:168) 位于org.hibernate.loader.CriteriaLoader.getResultColumnRow(CriteriaLoader.java:148) 位于org.hibernate.loader.loader.getRowFromResultSet(loader.java:753) 位于org.hibernate.loader.loader.processResultSet(loader.java:952) 位于org.hibernate.loader.loader.doQuery(loader.java:920) 在org.hibernate.loader.loader.doQueryAndInitializeNonLazyCollections(loader.java:354)上 位于org.hibernate.loader.loader.doList(loader.java:2553) 位于org.hibernate.loader.loader.doList(loader.java:2539) 位于org.hibernate.loader.loader.listIgnoreQueryCache(loader.java:2369) 位于org.hibernate.loader.loader.list(loader.java:2364) 位于org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:126) 位于org.hibernate.internal.SessionImpl.list(SessionImpl.java:1682) 位于org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:380) *************************************.select(BaseDao.java:141)
几天来,我调试代码和hibernate核心源代码,但无法理解:
如果我使用不带投影和变换器的简单选择,我会得到EntA的正常对象,其中列表LSENTC有值
如果我使用不带变压器的投影-我不会得到EntA
如果将投影与转换器一起使用,则a只能选择非列表字段

你对如何在课堂上使用标准选择和投射结果有什么想法吗? 谢谢

class EntA {
    @Id
    @GenericGenerator(name = "unique_id", strategy = "uuid")
    @GeneratedValue(generator = "unique_id")
    @Column(name = "id", nullable = false, length = 32, unique = true)
    private String id;
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "entbs", nullable = false, unique = false)
    private EntB entB;
    @OneToMany(mappedBy = "entcs", fetch = FetchType.LAZY)
    @OnDelete(action = OnDeleteAction.CASCADE)
    @JsonIgnore
    private List<EntC> listEntC;
    ... other fields , getters & setters ...
}
public List<EntA> select(..., List<String> fieldList, ...) {
    Criteria crit = sessionFactory.getCurrentSession().createCriteria(EntA.class);

    ...

    ProjectionList pl = Projections.projectionList();
    for (String prop : fieldList) {
        pl.add(Projections.property(prop), prop);
    }
    crit.setProjection(pl);
    crit.setResultTransformer(Transformers.aliasToBean(EntA.class));

    ...

    return crit.list();
}
List<String> fieldList = new ArrayList<String>();
fieldList.add("id");
fieldList.add("entB");
fieldList.add("entB");
fieldList.add("entB");
fieldList.add("other_field_name");
select(..., fieldList, ...); 
Hibernate: /* criteria query */ select this_.id as y0_, this_.entB as y1_, this_.entB as y2_, this_.entB as y3_, this_.other_field_name as y4_ from EntA this_ Hibernate: select entb0_.id as id1_12_0_, entb0_.idx as idx2_12_0_, entb0_.name as name3_12_0_ from EntB entb0_ where entb0_.id=?
fieldList.add("id");
fieldList.add("listEntC");
select(..., fieldList, ...);
Hibernate: /* criteria query */ select this_.id as y0_, this_.id as y1_ from EntA this_ java.lang.ArrayIndexOutOfBoundsException: 1 at org.hibernate.loader.criteria.CriteriaLoader.getResultRow(CriteriaLoader.java:168) at org.hibernate.loader.criteria.CriteriaLoader.getResultColumnOrRow(CriteriaLoader.java:148) at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:753) at org.hibernate.loader.Loader.processResultSet(Loader.java:952) at org.hibernate.loader.Loader.doQuery(Loader.java:920) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354) at org.hibernate.loader.Loader.doList(Loader.java:2553) at org.hibernate.loader.Loader.doList(Loader.java:2539) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2369) at org.hibernate.loader.Loader.list(Loader.java:2364) at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:126) at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1682) at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:380) *************************************.select(BaseDao.java:141)