gpt4 book ai didi

java - 连接表上的 HIbernate @manytomany 标准

转载 作者:行者123 更新时间:2023-11-30 00:35:37 24 4
gpt4 key购买 nike

我有以下@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>();

我想创建一个条件,它将包含其父 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));

但它不起作用 - 我收到一个异常(exception),类别没有parent_id字段

我该怎么做?

最佳答案

如果我理解正确,你可以这样做:

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

更新:

我已经测试过了,它在我这边有效。这是我的类别实现:

@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<>();
}

当我运行查询时,我得到了 parent 的 child

PS(异常(exception)情况):您不能在查询中指定列。您只能指定实体(类)字段

PS2:我发现您只需要子 ID 并更新了查询

引用:

What if I need to get based on market_category_id field?

通过此查询,您将根据父级的 market_id 获取子级

select child from Category parent join parent.children child where parent.market_id = :parentId

关于java - 连接表上的 HIbernate @manytomany 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22204590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com