我有以下@manytomany:
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "category_relation", joinColumns = { @JoinColumn(name = "category_id") }, inverseJoinColumns = { @JoinColumn(name = "child_id") })
private Set<Category> children = new HashSet<Category>();
我想创建一个Criteria,它会将所有Cateogry带到他们的父market_id是x。
Category looks like this:
-id
-name
-market_id
Cateogry_relation
-id
-category_id
-child_id
它应该类似于
select category_relation.child_id from category,category_relation where category.market_category_id = 2984 and category_relation.category_id = category.id
但不是仅返回child_id,而是返回完整的类别对象 我写了以下内容:
Criteria criteria = getSession().createCriteria(Category.class);
criteria.createCriteria("children").add(Restrictions.eq("parent_id", parentId));
但它不起作用 - 我得到一个例外,即Category没有parent_id字段
我该怎么做?
答案 0 :(得分:0)
如果我能正确理解你,你可以这样做:
Category parent = entityManager.find(Category.class, parentId);
Set<Category> children = parent.getChildren();
或者如果坚持使用查询
select child from Category parent join parent.children child where parent.id = :parentId
我已经对它进行了测试,它在我身边起作用。这是我的分类impl:
@Entity
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(joinColumns = {@JoinColumn(name = "cat_id")}, inverseJoinColumns = @JoinColumn(name = "inverse_cat_id"))
private Set<Category> children = new HashSet<>();
}
当我运行查询时,我得到了父母的孩子
PS (在您的例外情况下):您无法在查询中指定列。您只能指定实体(类)fields
PS2 :我看到你只需要孩子ID并更新查询
引用:
如果我需要根据market_category_id字段获取该怎么办?
通过此查询,您将根据父级的market_id
获取子级select child from Category parent join parent.children child where parent.market_id = :parentId