我有两个没有模型关系的表:表comm,列为:
comm
name date code
字符串表persondesc,列:
persondesc
code description
型两个表之间的关系是多对一(多人对一persondesc):
com.code = persondesc.code
这两个表用注解Map,但我没有声明关系。我尝试的是选择persondesc.description排序的comm表。我该怎么做JPA和Hibernate?
persondesc.description
oxosxuxt1#
因此,如果您的类没有“关系”,那么您可以执行如下查询:
SELECT a FROM A a CROSS JOIN B b WHERE a.someField = b.otherField ORDER BY b.anotherField
字符串可以使用JPA标准来实现,* 类似于 *
CriteriaBuilder cb = emf.getCriteriaBuilder(); CriteriaQuery<A> query = cb.createQuery(A.class); Root<A> aRoot = query.from(A.class); Root<B> bRoot = query.from(B.class); aRoot.alias("a"); bRoot.alias("b"); query.select(aRoot) .where(cb.equal(aRoot.get(A_.someField), bRoot.get(B_.otherField)) .orderBy(cb.asc(bRoot.get(B_.anotherField)));
型或者只是重新设计你的类,帮你的开发人员一个忙。
ffdz8vbo2#
Hibernate 5.1为JPQL引入了对无关实体的显式连接。所以现在你可以像原生SQL一样编写JOIN:
JOIN
List<Comm> results = entityManager .createQuery("""SELECT c FROM Comm c JOIN PersonDesc pd ON c.code = pd.code ORDER BY pd.description""", Comm.class) .getResultList();
字符串单击here查看更详细的示例。
ws51t4hk3#
你可以通过使用Subquery. Example对persondesc.description进行“like”操作来实现
Subquery<persondesc> subquery = query.subquery(persondesc.class); Root<persondesc> subRoot = subquery.from(persondesc.class); subquery.select(subRoot.get("code")); Predicate likeDescriptionPr = cr.like(subRoot.get("name"), "%" + searchTerm + "%") subquery.where(likeDescriptionPr); Predicate joinPredicate = cr.in(root.get("code")).value(subquery);
字符串
kuarbcqp4#
最简单的解决方法之一是创建视图,然后为该视图创建一个Entity类,并对视图执行查询。
查看:
create or replace view view_comm_persondesc as select c.name, c.date, c.code, p.description from comm c inner join persondesc p on c.code = p.code;
验证码
@Entity(name = "view_comm_persondesc") public class ViewCommPerson{ @Id private String code; private String name; private Date date; private String description; ... All Getters/Setters ... } CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<ViewCommPerson> query = cb.createQuery(ViewCommPerson.class); Root<ViewCommPerson> root = query.from(ViewCommPerson.class); // You can add your filter here List<ViewCommPerson> result = entityManager.createQuery(query).getResultList();
型希望它能服务于你的用例。
4条答案
按热度按时间oxosxuxt1#
因此,如果您的类没有“关系”,那么您可以执行如下查询:
字符串
可以使用JPA标准来实现,* 类似于 *
型
或者只是重新设计你的类,帮你的开发人员一个忙。
ffdz8vbo2#
Hibernate 5.1为JPQL引入了对无关实体的显式连接。所以现在你可以像原生SQL一样编写
JOIN
:字符串
单击here查看更详细的示例。
ws51t4hk3#
你可以通过使用Subquery. Example对persondesc.description进行“like”操作来实现
字符串
kuarbcqp4#
最简单的解决方法之一是创建视图,然后为该视图创建一个Entity类,并对视图执行查询。
查看:
字符串
验证码
型
希望它能服务于你的用例。