entitymanager.find()使用外键

时间:2016-07-19 02:25:37

标签: hibernate jpa entitymanager

我们可以找到一个使用entitymanager的实体使用与之关联的外键吗?

例如,我有一个这样的课程:

    @Entity
    @Table(name = "shopping_bag")
    public class ShoppingBag {

        @Id
        @GeneratedValue(generator="system-uuid")
        @GenericGenerator(name="system-uuid", strategy = "uuid")
        private String id;

        @OneToOne
        private Member member;

        @OneToMany(cascade=CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
        private Set<Product> product = new HashSet<Product>();
}

会员是这样的:

@Entity
@Table(name = "shopping_member")
public class Member {

    @Id
    @GeneratedValue(generator="system-uuid")
    @GenericGenerator(name="system-uuid", strategy = "uuid")
    private String id;

}

我要做的是让所有产品使用entityManager知道会员ID!

解决方案是使用Native SQL - 或HSQL,但我想知道是否有更简单的解决方案...任何想法?

2 个答案:

答案 0 :(得分:2)

您可以使用Hibernate Criteria

List results = entityManager.createCriteria(ShoppingBag.class, "ShoppingBag")
    .createAlias("ShoppingBag.member", "member", Criteria.LEFT_JOIN);
    .add( Restrictions.eq("member.id", someStringValue) )
    .list();

Rererence #1
Reference #2

答案 1 :(得分:1)

你显然不能使用find(),因为它找到一个带有id的类型的对象(因为它的javadoc告诉你足够清楚)。 您可以执行JPQL查询以获得所需内容。

SELECT p FROM ShoppingBag b JOIN b.product p JOIN b.member m WHERE m.id = :memberId
相关问题