Java 如何返回条件不同的结果
我有Bill和Bill_关于一对一和多对一关系的详细资料。我需要你帮我拿账单清单 Pojo 账单 我使用投影从列表中获取账单价值 dao休眠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")
@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