当前位置: 首页 > 知识库问答 >
问题:

使用Hibernate条件连接不同列上的三个实体所需的帮助

太叔鸿博
2023-03-14

我有三张桌子

Section (id, title, url)//id is Primary key
Category (id, title)//id is Primary key
SubCategory (id, title)//id is Primary key

在这里,我想像简单查询一样连接这些表

Select * From Category cat, Section se, SubCategory subCat  WHERE
 subCat.id=23456  AND subCat.category=cat.id  AND subCat.section = se.id

我的实体文件为:

@Entity
@Table(name="section")
public class SectionEntity{
  private int id;
  private String title;
  //Getter & setter method
}
@Entity
@Table(name="category")
public class CategoryEntity{
  private int id;
  private String title;
  private Set<SubCategoryEntity> subCategory;
  //Getter & setter method
  @OneToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY)
  @JoinColumn(name="category", insertable=false, updatable=false)
  public Set<SubCategoryEntity> getSubCategory(){
    return this.subCategory;
  }
}
@Entity
@Table(name="subcategory")
public class SubCategoryEntity{
  private int id;
  private String title;

  private Set<SectionEntity> sectionEntity;

  //Getter & setter method
  @OneToMany(fetch=FetchType.LAZY)
  @JoinColumn(name="id", insertable=false, updatable=false)
  public Set<SectionEntity> getSectionEntity(){
    this.section;
  }
}

步骤1:创建类别实体条件categoriesCriteria=Session.CreateCriteria(CategoriesEntity.Class,“CategoryEntity”);

步骤2:创建SubCategoryEntity和SectionEntity CategoriesCriteria.createAlias的别名(“CategoryEntity.SubCategoryEntity”、“SubCatentity”);CategoriesCriteria.CreateAlias(“SubcatEntity.SectionsEntity”,“SubcatSectionEntity”);

步骤3:在投影列表中设置属性

步骤4:将限制添加为:CategoriesCriteria.Add(restrictions.eq(“subCatentity.id”,primCategoryId));

步骤5:将projection属性设置为CategoryEntity条件CategoriesCriteria.SetProjection(ProjectProplist);

select this_.id as y0_, this_.title as y1_, this_.sef_url as y2_, subcatenti1_.id as y3_, subcatenti1_.title as y4_, subcatenti1_.sef_url as y5_
from jos_categories this_
inner join jos_subcategories subcatenti1_ on this_.id=subcatenti1_.category
inner join jos_sections subcatsect2_ on subcatenti1_.id=subcatsect2_.id
where subcatenti1_.id=?
select this_.id as y0_, this_.title as y1_, this_.sef_url as y2_, subcatenti1_.id as y3_, subcatenti1_.title as y4_, subcatenti1_.sef_url as y5_
from jos_categories this_
inner join jos_subcategories subcatenti1_ on this_.id=subcatenti1_.category
inner join jos_sections subcatsect2_ on subcatenti1_.section=subcatsect2_.id
where subcatenti1_.id=?

我怎样才能做到这一点,有人能帮我吗?

共有1个答案

许茂才
2023-03-14

在SubCategoryFile中进行如下更改,

1)删除“private int section;”及其所有getter和setter方法。

2)并使用此

       @JoinColumn(name="section", insertable=false, updatable=false)
       public Set<SectionEntity> getSection(){
          this.section;
           }

然后试着跑。我希望它能奏效

 类似资料:
  • 我正在尝试使用条件连接多个表,但遇到了一些问题,请帮助我:我有一个sql查询,如: 这三个表:截止时间(has country)、国家、交易所(has country)是3个实体类。 我如何使用hibernate标准像这样加入,我下面的代码仍然不完整:

  • AnsprechPartner Lieferant ansprechpartner.java lieferant.java 在我的AnsprechPartner.java中,我是这样做的: 在我的Lieferanten.java中,我是这样做的:

  • 我想用spring数据写一个查询,可以找到所有有自己的狗和车的人…可以有任何身体帮助吗

  • 问题内容: 使用Hibernate的条件,我想执行以下操作: 我认为执行以下操作将产生想要的结果: 但是,这实际上是执行类似以下操作: 显然,这引发了错误。 除了不使用条件以外,还有解决方案吗? 谢谢, 布兰登 问题答案:

  • 我有两个实体与单向@OneTo多项映射: 我想获得所有B实体的列表,它们是匹配限制的A实体的子实体。 这就是我卡住的地方:c.list()将返回给我一个对象列表。我不关心A,我想要B。我如何使用Hibernate标准/预测来完成它?如果有关系,我使用Hibernate 4.2.12 在这种简化的情况下,只是急切地去拿是有意义的;在真实的例子中,有一个由四个一对一的单向关联组成的链,我想让所有(或者

  • 问题内容: 我有2个Java类和,它们都存在于数据库中。 人: 关系: 每个人都有(或没有)关系列表,当关系的child_id或parent_id等于该人的id时,应将关系添加到列表中。 TL; DR:当=>将关系添加到与人的关系列表中时 我面临的问题是该注释: 创建以下SQL(只是必要的部分): Java Hibernate中正确的注释是什么,以生成一条用 OR* 代替 AND 的SQL语句 *