我们可以找到一个使用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,但我想知道是否有更简单的解决方案...任何想法?
答案 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();
答案 1 :(得分:1)
你显然不能使用find()
,因为它找到一个带有id的类型的对象(因为它的javadoc告诉你足够清楚)。
您可以执行JPQL
查询以获得所需内容。
SELECT p FROM ShoppingBag b JOIN b.product p JOIN b.member m WHERE m.id = :memberId