Tag: criteria api

使用JPA Criteria Api和hibernate spatial 4

鉴于这里的查询示例: http : //www.hibernatespatial.org/tutorial-hs4.html Query query = em.createQuery(“select e from Event e where within(e.location, :filter) = true”, Event.class); query.setParameter(“filter”, filter); 是否可以使用jpa 2条件api重写查询?(我不确定我应该如何处理within(e.location, :filter)部分。

Hibernate Criteria API – 添加标准:字符串应该在集合中

我必须遵循实体对象 @Entity public class Foobar { … private List uuids; … } 现在我想制作一个标准查询来获取所有Foobar pojos,其uuids列表包含字符串“abc123”,我只是不确定如何制定适当的标准。

使用Javagenerics进行JPA findAll()查询和WHERE子句

因此,经过10年多的休整,我将回到Java并尝试使用JPA和Javagenerics。 我已经基本上创建了一个基于generics的findAll(other) JPA查询 SELECT * FROM source WHERE other_id = other.id; 这是我要去的地方。 它有效,但我想知道是否有更好,更清洁的方法来做到这一点。 使用ManagedType很难,而且没有太多完整的文档或简单的例子。 我决定尽可能保持我的代码通用(没有双关语)所以我使用JPA2。 这是所有实体类的根。 我可能不需要它,但它阻止我有基本的错误。 import java.io.Serializable; public abstract class DomainObject implements Serializable { private static final long serialVersionUID = 1L; public abstract void setId(Long id); public abstract Long getId(); } 这是抽象的DAO类。 我为实现类扩展了这个,因为我需要更具体地做其他活动 – 主要是确保加载延迟集。 public abstract class GenericDAOImpl implements GenericDAO { private […]

需要帮助创建JPA条件查询

我正在使用Glassfish和JSF构建我的第一个Java EE Web应用程序。 我对条件查询相当新,我有一个我需要执行的查询,但javaee6教程在示例上似乎有点薄。 无论如何,我很难创建查询。 目标:我希望用最多的文档来存储公司。 公司与Documents有一个OneToMany关系。 Documents与多个表具有ManyToOne关系,“usertype”列区分它们。 MySQL查询: SELECT USERID, COUNT(USERID) AS CNT FROM DOCUMENTS WHERE USERTYPE=”COMPANY” GROUP BY USERID ORDER BY CNT DESC 谢谢 –update–根据用户反馈,这是我到目前为止: CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cqry = cb.createQuery(Documents.class); //Intersting Stuff Root root = cqry.from(Documents.class); Expression userid = root.get(“userID”); Expression usertype = root.get(“userType”); Expression count = cb.count(userid); cqry.multiselect(userid, count); […]

JPA Criteria API – 如何添加JOIN子句(作为一般句子)

我试图动态构造查询,我的下一个目标是添加JOIN子句(我不知道如何使用API​​)。 例如,到目前为止,这段代码对我有用: … Class baseClass; … CriteriaBuilder cb = JpaHandle.get().getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(this.baseClass); Root entity_ = cq.from(this.baseClass); Predicate restrictions = null; … restrictions = cb.conjunction(); restrictions = cb.and(restrictions, entity_.get(“id”).in(this.listId)); … cq.where(restrictions); … Query qry = JpaHandle.get().createQuery(cq); (注意:JpaHandle来自wicket-JPA实现) 我的愿望是添加JOIN子句(尽可能通用)! 我在类中有特定的注释(this.baseClass) 例如 : @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = “assay_id”, nullable = false) 那么,在标准JPA中有没有这样的方法呢? (注意:这不编译) 这是一个实际的失败方法: … […]

如何查询与JPA2的M:N关系?

我有一个对象(BlogPost),它包含一个M:N元素集合(标签)。 如何查询一个对象(BlogPost),其中至少有一个对象与一组标签(由用户定义)中的元素与JPA2(Hibernate)匹配。 findBlogPostWithAtLeastOneMatchingTag(Collection tags){ ???? } 我的主要问题是,我实际上需要比较两个标签集合: – BlogPost的标签集合。 – 我搜索的collections品 我尝试Select p from Post p where p.tags in(:tags)但它不起作用,因为我的post实体只有一个标签。 那我该怎么做呢? 我的BlogPost实体看起来像这样。 它有几个标签。 @Entity public class BlogPost{ /** The tags. */ @ManyToMany() @NotNull private Set tags; @NotBlank private String content; … } 解决方案不能是JPQL,JPA-Criteria(不是Hibernate-Criteria)也可以。

具有多个参数的JPA Criteria API

我需要创建一个使用带有多个参数的JPA Criteria API的搜索方法。 现在问题是不是每个参数都是必需的。 因此有些可能为null,并且它们不应包含在查询中。 我已经用CriteriaBuilder尝试了这个,但我看不出如何让它工作。 使用Hibernate Criteria API,这非常简单。 只需创建条件,然后添加限制。 Criteria criteria = session.createCriteria(someClass.class); if(someClass.getName() != null) { criteria.add(Restrictions.like(“name”, someClass.getName()); } 我怎么能用JPA的Criteria API实现同样的目标?

标准JPA 2有3个表

我正在尝试创建一个标准来从3个表中检索一些对象(关联,更新和详细信息)。 详细信息引用了“关联”和“更新”,“更新”引用了“详细信息”列表。 我的目标是在给定Associate id的情况下检索在指定字段中至少具有null值的Detail的更新列表。 在JPQL中很容易做到,但客户说这必须用标准编码。 我的JPQL是: public List getUpdates(long associateId) { TypedQuery query = em.createQuery(“select distinct u from Update u, Detail dt, Associate a ” + “where dt.update = u and dt.associate = a and a.associateId = :id and ” + “dt.ack_date is null”, Update.class); query.setParameter(“id”, associateId); return query.getResultList(); } 我尝试了以下内容,但它只返回了数据库中的所有更新: public List getUpdates(long associateId) […]

使用JPA Criteria API,您是否可以执行只获得一次连接的获取连接?

使用JPA 2.0。 似乎默认情况下(没有显式提取),在1 + N个查询中提取@OneToOne(fetch = FetchType.EAGER)字段,其中N是包含定义与不同相关实体的关系的实体的结果数。 使用Criteria API,我可能会尝试避免如下: CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery query = builder.createQuery(MyEntity.class); Root root = query.from(MyEntity.class); Join join = root.join(“relatedEntity”); root.fetch(“relatedEntity”); query.select(root).where(builder.equals(join.get(“id”), 3)); 理想情况下,上述内容应与以下内容相同: SELECT m FROM MyEntity m JOIN FETCH myEntity.relatedEntity r WHERE r.id = 3 但是,条件查询导致根表不必要地连接到相关实体表两次; 一次用于获取,一次用于where谓词。 生成的SQL看起来像这样: SELECT myentity.id, myentity.attribute, relatedentity2.id, relatedentity2.attribute FROM my_entity myentity INNER JOIN […]

JPA / Hibernate静态元模型属性未填充 – NullPointerException

我想将JPA2 Criteria API与元模型对象一起使用,这看起来很简单: … Root albm = cq.from(JPAAlbum.class); … albm.get(JPAAlbum_.theme) … ; 但是这个Root.get总是抛出一个NullPointerException 。 JPAAlbum_.theme是由Hibernate自动生成的,看起来像 public static volatile SingularAttribute theme; 但它显然从未填充过。 我错过了框架初始化的一步吗? 编辑:这是我在崩溃时如何使用JPA和元模型的片段: CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(JPAAlbum.class) ; Root albm = cq.from(JPAAlbum.class); cq.where(cb.equal(albm.get(JPAAlbum_.theme).get(JPATheme_.id), session.getTheme().getId())) ; ( JPAAlbum_是一个类,所以我只是import之前)和相关的JPAAlbum_ : Caused by: java.lang.NullPointerException at org.hibernate.ejb.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:138) at net.wazari.dao.jpa.WebAlbumsDAOBean.getRestrictionToAlbumsAllowed(WebAlbumsDAOBean.java:55) 编辑2: 在JBoss EntityManager指南中,我可以看到 当构建Hibernate EntityManagerFactory时,它将查找每个托管类型的规范元模型类,如果它找到任何它将向其中注入适当的元模型信息,如[JPA 2规范,第6.2节中所述] […]