Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.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 如何返回条件不同的结果_Java_Hibernate_Annotations_Projection_Hibernate Criteria - Fatal编程技术网

Java 如何返回条件不同的结果

Java 如何返回条件不同的结果,java,hibernate,annotations,projection,hibernate-criteria,Java,Hibernate,Annotations,Projection,Hibernate Criteria,我有Bill和Bill_关于一对一和多对一关系的详细资料。我需要你帮我拿账单清单 Pojo 账单 我使用投影从列表中获取账单价值 dao休眠 @Transactional public List<Bill> getbillDetailsByBillId(String billId) { Criteria cr = null; try { cr = getSession().createCriteria(Bill.class,"bill")

我有Bill和Bill_关于一对一和多对一关系的详细资料。我需要你帮我拿账单清单

Pojo

账单

我使用投影从列表中获取账单价值

dao休眠

@Transactional
public List<Bill> getbillDetailsByBillId(String billId) {
    Criteria cr = null;
    try {
        cr = getSession().createCriteria(Bill.class,"bill")
                .createAlias("bill.billDetails","billDetails")
                .setProjection(Projections.projectionList()
  // I tried    .setProjectionProjections.distinct(Projections.projectionList()
                        .add(Projections.property("billNo"),"billNo")
                        .add(Projections.property("billDetails.amount"),"billDetails.amount")
                        .add(Projections.property("billDetails.rate"),"billDetails.rate"))                          
                        .add(Restrictions.eq("id", billId))
                        .setResultTransformer(new AliasToBeanNestedResultTransformer(Bill.class));

    } catch (Exception e) {
        System.out.println("Get bill DetailsByBillId Error----------"+e);
        e.printStackTrace();
    }
    System.out.println(cr.list().size());
    return cr.list();
}

如何通过Hibernate条件查询获取此信息?请帮助

首先,您的映射不正确。您具有双向关联,其中一侧(一侧)必须与一侧相反:

@OneToMany(mappedBy = "billId", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<BillDetails> billDetails = new HashSet<BillDetails>();
这将获得账单,并且由于您选择将OneToMany协会设置为“渴望”,它也将立即加载其账单详细信息

如果您没有使关联变得急切(并且您真的应该让它保持懒惰),那么您可以使用这个简单的HQL查询来加载包含其详细信息的账单:

select distinct b from Bill bill 
left join fetch bill.billDetails 
where bill.id = :billId

我需要通过投影实现,因为我在JSON中遇到了一个问题:“com.google.gson.gson$FutureTypeAdapter.write(gson.java:899)com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)”。通过使用投影,误差消失了。请为这个错误提供帮助。
{billNo:231,
    billDetails[{amount:100,rate:1}{amount:200,rate:2}
     {amount:300,rate:30}{amount:400,rate:4}] }
@OneToMany(mappedBy = "billId", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<BillDetails> billDetails = new HashSet<BillDetails>();
Bill bill = (Bill) session.get(Bill.class, billId);
select distinct b from Bill bill 
left join fetch bill.billDetails 
where bill.id = :billId