将hibernate CriteriaQuery用于具有ID ref的实体到另一个表实体

问题描述 投票:0回答:1

我有一个复杂的(对我来说)hibernate查询,我试图弄清楚,我的头脑无法得到如何做到这一点。

我需要找到所有具有EntityRegistration.userName =〜“foo”的Device实体。

实体类:

@Entity()
@Table
public class Device {
    @Basic()
    @Column(name = "HostName")
    private String hostName = null;
    @Basic()
    @Column(name = "RegistrationID")
    private String registrationID = null;
}
@Entity()
@Table
public class EntityRegistration {
    @Basic()
    @Column(name = "ID")
    private String iD = null;
    @Basic()
    @Column(name = "UserName")
    private String userName = null;
}

Device.registrationID映射到Entity Registration.iF。我不想更改表以将实体注册作为OneToMany引用。

这是我尝试过的类似查询,其中有一个OneToMany引用而不是像这种情况下的Basic类型:

CriteriaBuilder builder = context.getBuilder();
Root<Device> root = context.getRoot();
Join<Device,EntityRegistration> joinReg = root.join("registrationID");
builder.lower(joinReg.get("id")), userName);

我理解为什么这段代码不起作用,但我无法弄清楚如何正确编写查询这个我有ID引用的情况。

java hibernate jpa criteria hibernate-criteria
1个回答
0
投票

您的代码段实际上是JPA Criteria,它符合JPA标准。

JPA标准不提供加入不相关实体的解决方案。参见Hibernate专家的文章:Vlad Mihalcea

只使用Hibernate QUERY是可行的:

TypedQuery<Device> q = em.createQuery(
"select d from Device d JOIN EntityRegistration e ON d.registrationID=e.id AND e.userName=?1", Device.class);
q.setParameter(1, "peter")
q.getResultList();
© www.soinside.com 2019 - 2024. All rights reserved.