Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 如何使用条件连接不同列上的三个表_Hibernate_Join - Fatal编程技术网

Hibernate 如何使用条件连接不同列上的三个表

Hibernate 如何使用条件连接不同列上的三个表,hibernate,join,Hibernate,Join,上面的快照显示了关系,正如我使用条件所要求的那样。 我有三个表是Content(Id-PK,title),Article(Id-PK,articleId,sectionId)Section(Id-PK,title)。数据库中没有使用外键概念 Content.java 以下是我得到的结果: 从con.id=ar.articleId上的内容con内部联接项目ar中选择*内部联接部分sec on ar.id=sec.id 这是不正确的,如果我将其与预期的SQL查询匹配为: 预期的SQL查询应采用此格

上面的快照显示了关系,正如我使用条件所要求的那样。 我有三个表是Content(Id-PK,title),Article(Id-PK,articleId,sectionId)Section(Id-PK,title)。数据库中没有使用外键概念


Content.java 以下是我得到的结果:

从con.id=ar.articleId上的内容con内部联接项目ar中选择*内部联接部分sec on ar.id=sec.id

这是不正确的,如果我将其与预期的SQL查询匹配为:

预期的SQL查询应采用此格式 从Content con、Article ar、Section sec中选择*,其中con.id=ar.articleId和ar.sectionId=sec.id

有人能帮我解决这个问题吗?我如何使用与预期的SQL查询相同的条件来实现结果

// Firstly,you need entity to your Pojo like this:
// In Article, add a field: private Content content,support Getter and Setter for it
// In Section, add a field: private Article article,also Getter and Setter

// there have three Entity:content,article,section

// Create a DetachedCriteria for Section
DetachedCriteria sectionCriteria = DetachedCriteria
            .forClass(Section.class);

// Create a SubDetachedCriteria for Article InnerJoin Section
// the article is Section's field
DetachedCriteria articleCriteria = sectionCriteria .createCriteria("article",       DetachedCriteria.INNER_JOIN);

// Add join Restriction
// id is article's identity
// for this SQL:INNER JOIN Section sec ON ar.id=sec.id
articleCriteria.add(Restrictions.eq("id",section.id));

// Create a SubDetachedCriteria for Content InnerJoin Article
DetachedCriteria contentCriteria = articleCriteria.createCriteria("content",       DetachedCriteria.INNER_JOIN);

 // Add join Restriction
 // for this SQL:inner join Article ar on con.id=ar.articleId
contentCriteria.add(Restrictions.eq("id",article.articleId));

 // finally,after you finish the join,use the sectionCriteria to execute the CriteriaQuery

我希望它能帮助你,因为我在我的项目中使用过它

Hi MageSelios,根据你在这里发布的答案,查询将打印为:[SELECT*FROM Content con internal join Article ar on con.id=ar.articleId internal join Section sec on ar.id=sec.id],但我预期的查询将采用这种格式[从Content-Content、Article-Article、Section-Section中选择*,其中Content.id=Article.articleId和Article.sectionId=Section.id][id是所有三个实体内容、Article、Section中的主键,并且数据库中没有外键概念。]您好,Magexelos,这里您告诉我使用DetachedCriteria,但您知道当我们将此
DetachedCriteria articleCriteria=sectionCriteria.createCriteria(“article”,DetachedCriteria.INNER_JOIN);
第二个参数使用String not int,写入createCriteria(String,String).我需要此联接的预期SQL查询
SELECT*自Content con,Article ar,Section sec,其中con.id=ar.articleId和ar.sectionId=sec.id
@Entity
@Table(name="article")
public class Article{
  private int id;       //PK
  private int articleId;
  private int sectionId;
  private Set<Section> section;
  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  @Column(name="id")
  public int getId(){
      return id;
  }      
  public void setId(int id){
      this.id = id;
  }
  @Column(name="articleId")
  public int getArticleId(){
      return articleId;
  }
  public void setArticleId(int articleId){
      this.articleId = articleId;
  }
  @Column(name="sectionId")
  public int getSectionId(){
      return sectionId;
  }
  public void setSectionId(int sectionId){
      this.sectionId = sectionId;
  }
  @OneToMany(fetch=FetchType.LAZY)
  @JoinColumn(name="id")
  public Set<Section> getSection(){
      return section;
  }
  public void setSection(Set<Section> section){
      this.section = section;
  }
}
Criteria content = session.createCriteria(Content.class,"con");
con.createAlias("con.article", "ar");
con.createAlias("ar.section", "sec");
content.list();
// Firstly,you need entity to your Pojo like this:
// In Article, add a field: private Content content,support Getter and Setter for it
// In Section, add a field: private Article article,also Getter and Setter

// there have three Entity:content,article,section

// Create a DetachedCriteria for Section
DetachedCriteria sectionCriteria = DetachedCriteria
            .forClass(Section.class);

// Create a SubDetachedCriteria for Article InnerJoin Section
// the article is Section's field
DetachedCriteria articleCriteria = sectionCriteria .createCriteria("article",       DetachedCriteria.INNER_JOIN);

// Add join Restriction
// id is article's identity
// for this SQL:INNER JOIN Section sec ON ar.id=sec.id
articleCriteria.add(Restrictions.eq("id",section.id));

// Create a SubDetachedCriteria for Content InnerJoin Article
DetachedCriteria contentCriteria = articleCriteria.createCriteria("content",       DetachedCriteria.INNER_JOIN);

 // Add join Restriction
 // for this SQL:inner join Article ar on con.id=ar.articleId
contentCriteria.add(Restrictions.eq("id",article.articleId));

 // finally,after you finish the join,use the sectionCriteria to execute the CriteriaQuery