首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate查询用于从多个表中选择多个值

Hibernate查询用于从多个表中选择多个值
EN

Stack Overflow用户
提问于 2017-01-20 08:00:22
回答 1查看 707关注 0票数 0

以下是我的数据库结构。

我希望得到以下结果:

对于任何用户进入的retrospective_id,我想要iteration_name,isd,ied,project_name和comments:comment_id,comment_type,comment_text。

我该问什么问题??如何连接表?是否需要内部/外部连接??

我的代码:

IterationInfo.java

代码语言:javascript
复制
package pojoclasses;

import java.util.Date;

public class IterationInfo
{
    private int iteration_id;
    private int project_id;
    private String iteration_name;
    private Date isd;
    private Date ied;

// getter and setter section

}

Projectinfo.java

代码语言:javascript
复制
package pojoclasses;

public class ProjectInfo 
{
    private int project_id;
    private String project_name;
    // getter and setter section
}

UserInfo.java

代码语言:javascript
复制
package pojoclasses;

public class UserInfo 
{
    private int user_id;
    private String user_name;
    private String email_id;
    private int rally_objectid;
     // getter and setter section
}

RetrospectiveInfo.java

代码语言:javascript
复制
package pojoclasses;

import java.util.Date;

public class RetrospectiveInfo 
{
    private int retrospective_id;
    private Date retrospective_date;
    private int project_id;
    private int iteration_id;
    private int user_id;
    // getter and setter section
}

PageInfo.java

代码语言:javascript
复制
package pojoclasses;

import java.util.Date;

public class PageInfo 
{
    private int comment_id;
    private String comment_text;
    private String comment_type;
    private int user_id;
    private int retrospective_id;
    private Date creation_date;
    private Date modification_date;
    // getter and setter section
}

UserInfo.hbm.cfg

代码语言:javascript
复制
     <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 <!-- Generated 20 Jan, 2017 2:07:02 PM by Hibernate Tools 3.5.0.Final -->
 <hibernate-mapping>
 <class name="pojoclasses.UserInfo" table="USERINFO">
    <id name="user_id" type="int">
        <column name="USER_ID" />
        <generator class="assigned" />
    </id>
    <property name="user_name" type="java.lang.String">
        <column name="USER_NAME" />
    </property>
    <property name="email_id" type="java.lang.String">
        <column name="EMAIL_ID" />
    </property>
    <property name="rally_objectid" type="int">
        <column name="RALLY_OBJECTID" />
    </property>
 </class>
 </hibernate-mapping>

RetrospectiveInfo.hbm.xml

代码语言:javascript
复制
    <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 20 Jan, 2017 2:06:00 PM by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="pojoclasses.RetrospectiveInfo" table="RETROSPECTIVEINFO">
    <id name="user_id" type="int">
        <column name="USER_ID" />
        <generator class="assigned" />
    </id>
    <property name="retrospective_id" type="int">
        <column name="RETROSPECTIVE_ID" />
    </property>
    <property name="retrospective_date" type="java.util.Date">
        <column name="RETROSPECTIVE_DATE" />
    </property>
    <property name="project_id" type="int">
        <column name="PROJECT_ID" />
    </property>
    <property name="iteration_id" type="int">
        <column name="ITERATION_ID" />
    </property>
</class>
</hibernate-mapping>

Projectinfo.hbm.cfg

代码语言:javascript
复制
    <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 20 Jan, 2017 2:05:23 PM by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="pojoclasses.ProjectInfo" table="PROJECTINFO">
    <id name="project_id" type="int">
        <column name="PROJECT_ID" />
        <generator class="assigned" />
    </id>
    <property name="project_name" type="java.lang.String">
        <column name="PROJECT_NAME" />
    </property>
</class>
</hibernate-mapping>

Pageinfo.hbm.cfg

代码语言:javascript
复制
    <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 20 Jan, 2017 2:03:56 PM by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="pojoclasses.PageInfo" table="PAGEDETAILS">
    <id name="user_id" type="int">
        <column name="USER_ID" />
        <generator class="assigned" />
    </id>
    <property name="comment_id" type="int">
        <column name="COMMENT_ID" />
    </property>
    <property name="comment_text" type="java.lang.String">
        <column name="COMMENT_TEXT" />
    </property>
    <property name="comment_type" type="java.lang.String">
        <column name="COMMENT_TYPE" />
    </property>
    <property name="retrospective_id" type="int">
        <column name="RETROSPECTIVE_ID" />
    </property>
    <property name="creation_date" type="java.util.Date">
        <column name="CREATION_DATE" />
    </property>
    <property name="modification_date" type="java.util.Date">
        <column name="MODIFICATION_DATE" />
    </property>
</class>
</hibernate-mapping>

IterationInfo.hbm.xml

代码语言:javascript
复制
    <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 20 Jan, 2017 2:03:23 PM by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="pojoclasses.IterationInfo" table="ITERATIONINFO">
    <id name="project_id" type="int">
        <column name="PROJECT_ID" />
        <generator class="assigned" />
    </id>
    <property name="iteration_id" type="int">
        <column name="ITERATION_ID" />
    </property>
    <property name="iteration_name" type="java.lang.String">
        <column name="ITERATION_NAME" />
    </property>
    <property name="isd" type="java.util.Date">
        <column name="ISD" />
    </property>
    <property name="ied" type="java.util.Date">
        <column name="IED" />
    </property>
</class>
</hibernate-mapping>

主Conteroller类

代码语言:javascript
复制
package packagecontroller;

import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/json/retrospective")
public class MainControllerClass 
{
@RequestMapping(value="{userid}", method = RequestMethod.GET)
public @ResponseBody List<ProjectInfo> getIterationInfoInJSON(@PathVariable int userid)

{
    Configuration con = new Configuration();
    con.configure("hibernate.cfg.xml");
    SessionFactory SF = con.buildSessionFactory();
    Session session= SF.openSession();
    //Query to be fired..
    session.close();
    SF.close();
    return listiterationinfo;
}
}

在oracle sql数据库中,为我提供所需结果的sql查询:有两个查询:

代码语言:javascript
复制
SELECT ITERATIONINFO.ITERATION_NAME, ITERATIONINFO.ISD, ITERATIONINFO.IED, PROJECTINFO.PROJECT_NAME
FROM RETROSPECTIVEINFO, PROJECTINFO, ITERATIONINFO
WHERE RETROSPECTIVEINFO.RETROSPECTIVE_ID = 500
AND RETROSPECTIVEINFO.PROJECT_ID = PROJECTINFO.PROJECT_ID
AND RETROSPECTIVEINFO.ITERATION_ID = ITERATIONINFO.ITERATION_ID;

SELECT PAGEDETAILS.COMMENT_ID, PAGEDETAILS.COMMENT_TYPE, PAGEDETAILS.COMMENT_TEXT, USERINFO.USER_NAME, USERINFO.EMAIL_ID
FROM PAGEDETAILS, USERINFO, RETROSPECTIVEINFO
WHERE RETROSPECTIVEINFO.RETROSPECTIVE_ID = 500
AND PAGEDETAILS.RETROSPECTIVE_ID = RETROSPECTIVEINFO.RETROSPECTIVE_ID
AND PAGEDETAILS.USER_ID = USERINFO.USER_ID;
EN

回答 1

Stack Overflow用户

发布于 2017-01-20 22:24:01

正如Joe在评论中所说的,我认为您必须更好地重写您的pojos和映射,例如,我为您编写了RetrospectiveInfo类和映射:

代码语言:javascript
复制
 package pojoclasses;

public class RetrospectiveInfo 
        {
            private int retrospective_id;
            private Date retrospective_date;
            private ProjectInfo project;
            private IterationInfo iteration;
            private UserInfo user_id;
            // getter and setter section
        }

您的映射将如下所示--我为您编辑prjoct映射,用于exmaple:

代码语言:javascript
复制
 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 20 Jan, 2017 2:06:00 PM by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="pojoclasses.RetrospectiveInfo" table="RETROSPECTIVEINFO">
    <id name="user_id" type="int">
        <column name="USER_ID" />
        <generator class="assigned" />
    </id>
    <property name="retrospective_id" type="int">
        <column name="RETROSPECTIVE_ID" />
    </property>
    <property name="retrospective_date" type="java.util.Date">
        <column name="RETROSPECTIVE_DATE" />
    </property>
    <many-to-one name="project" column="project_id" entityname="pojoclasses.ProjectInfo" />

    <property name="iteration_id" type="int">
        <column name="ITERATION_ID" />
    </property>
</class>
</hibernate-mapping>

如果你像我说的那样重覆它们,你可以像这样写查询:

从RetrospectiveInfo e选择* e.iteration.iterationName,e.iteration.isd,e.iteration.ied,e.iteration.projec.name

希望这能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41758707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档