Hibernate 如何使用条件连接不同列上的三个表
上面的快照显示了关系,正如我使用条件所要求的那样。 我有三个表是Content(Id-PK,title),Article(Id-PK,articleId,sectionId)Section(Id-PK,title)。数据库中没有使用外键概念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.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