如何在hibernate中使用union执行查询?
Hibernate不支持union,所以我想单独运行sql。 但最后如何结合这些价值观呢?
String query ="select dp.PRODUCTFAMILY,dp.PRODUCTFAMILYDESCR from TABEL1 dd, TABEL2 DP where dd.id = 00002 and dd.PRODUCTFAMILY is null union select dp.DIVNUMBER,dp.DIVDESCR from TABEL1 dd, TABEL2 DP where dd.id = 00002 and dd.PRODUCT is not null and dd.PRODUCTFAMILY is not null"; public List findmethod() { return findAllByQuery(query); }
请告知如何单独执行两个sql,最后如何组合这些值?
请注意,UNION中的每个SELECT语句必须具有相同的列数。 列还必须具有类似的数据类型。 此外,每个SELECT语句中的列必须具有相同的顺序。
如果是这样,请在查询中添加别名:
select dp.PRODUCTFAMILY as PRODUCTFAMILY,dp.PRODUCTFAMILYDESCR as PRODUCTFAMILYDESCR from TABEL1 dd, TABEL2 DP where dd.id = 00002 and dd.PRODUCTFAMILY is null union select dp.DIVNUMBER as PRODUCTFAMILY,dp.DIVDESCR as PRODUCTFAMILYDESCR from TABEL1 dd, TABEL2 DP where dd.id = 00002 and dd.PRODUCT is not null and dd.PRODUCTFAMILY is not null
您可以这种方式使用SQLQuery和AliasToBeanResultTransformer:
session.createSQLQuery(above sql with union).addScalar("PRODUCTFAMILY",StringType.INSTANCE).addScalar("PRODUCTFAMILYDESCR",StringType.INSTANCE).setResultTransformer(new AliasToBeanResultTransformer(PRODUCT.class))
PRODUCT必须具有emtpy构造函数和字段访问器。
否则,如果此联合旨在提取具有不同类型的不同字段,则必须分别运行两个查询,addAll()第二个结果首先!
我想分享一下,在我的情况下,我发现了一种避开这种情况的情况。 这里唯一的规则是具有相同的类型,在这种情况下String,对应于返回列表,可以添加所需数量的表:
public List findByCPForCNPJ(String query){ TypedQuery ccpf = manager.createQuery("select cpf from PessoaFisica where cpf like :pCpf", String.class); ccpf.setParameter("pCpf", "%" + query + "%"); List lista1 = ccpf.getResultList(); TypedQuery ccnpj = manager.createQuery("select cnpj from PessoaJuridica where cnpj like :pCnpj", String.class); ccnpj.setParameter("pCnpj", "%" + query + "%"); lista1.addAll(ccnpj.getResultList()); return lista1;
}
我在JAVA中使用了一种方法来解决这个问题。 我希望我有所贡献,祝大家好运……
- 将JPA与Hibernate实现一起使用:entityManager.remove – 不工作
- JBoss 5.1.0.GA中的Hibernate 3.5-Final
- Hibernate – java.lang.OutOfMemoryError:Java堆空间
- 一次性向所有MySQL Select Queries添加一列
- 无法通过reflection设置器设置字段值
- 让Hibernate和SQL Server与VARCHAR和NVARCHAR一起玩得很好
- 使用EAGER @ElementCollection对find()进行Hibernate LazyInitializationException
- 使用Spring和Hibernate的嵌套事务
- Hibernate自定义UserType无法正常工作