java - Hibernate 连接两个表

标签 java jquery hibernate join

直到最近我才开始使用 hibernate 框架,因此我无法在两个表之间建立连接。你能帮我理解我错在哪里吗?

我的 Oracle 查询是:

select * from ld_folder_scan ls, ld_folder_scan_content lss where ls.folder_id = lss.folder_id and ls.folder_id = 1;

我有两个实体类 ld_folder_scan 和 ld_folder_scan_content。我需要连接这两个表并获取与给定条件匹配的所有记录。

ld_folder_scan
+-----------+----------------------------+-------------+------------+
| folder_id | status_folder_scan_type_id | folder_name | service_id |
+-----------+----------------------------+-------------+------------+
|  1        | Sent                       | F001        |      1     |
|  2        | Receive                    | F002        |      1     |
+-----------+----------------------------+-------------+------------+

ld_folder_scan_content
+-----------+-------------+
| folder_id | document_id | 
+-----------+-------------+
|  1        |      1      |
|  1        |      2      |
|  1        |      3      |
|  1        |      4      |
|  2        |      5      |
|  2        |      6      |
|  2        |      7      |
|  2        |      8      |
|  2        |      9      |
+-----------+-------------+

我想从查询结果中得到什么:

+-----------+----------------------------+-------------+------------+-------------+
| folder_id | status_folder_scan_type_id | folder_name | service_id | document_id | 
+-----------+----------------------------+-------------+------------+-------------+
|  1        | Sent                       | F001        |      1     |      1      |
|  1        | Sent                       | F001        |      1     |      2      |
|  1        | Sent                       | F001        |      1     |      3      |
|  1        | Sent                       | F001        |      1     |      4      |
+-----------+----------------------------+-------------+------------+-------------+

Java 代码:

package org.hibernate;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "ld_folder_scan")
public class ld_folder_scan {

    @Id
    @GeneratedValue
    private long folder_id;
    private short status_folder_scan_type_id;
    private String folder_name;
    private short service_id;


    @OneToMany( cascade = CascadeType.ALL, orphanRemoval = true )
    @JoinColumn(name = "folder_id")
    private List<ld_scatole_scan_content> ld_scatole_scan_content = new ArrayList<>();

    public long getFolder_id() {
        return folder_id;
    }

    public void setFolder_id(long folder_id) {
        this.folder_id = folder_id;
    }

    public short getStatus_folder_scan_type_id() {
        return status_folder_scan_type_id;
    }

    public void setStatus_folder_scan_type_id(short status_folder_scan_type_id) {
        this.status_folder_scan_type_id = status_folder_scan_type_id;
    }

    public String getFolder_name() {
        return folder_name;
    }

    public void setFolder_name(String folder_name) {
        this.folder_name = folder_name;
    }

    public short getService_id() {
        return service_id;
    }

    public void setService_id(short service_id) {
        this.service_id = service_id;
    }

    public void setLd_folder_scan_content(List<ld_folder_scan_content> ld_folder_scan_content) {
        this.ld_folder_scan_content = ld_folder_scan_content;
    }
}

---------------------------------------------------

package org.hibernate;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;


    @Entity
    @Table(name = "ld_folder_scan_content")
    public class ld_folder_scan_content {

    @Id
    @GeneratedValue
    private long folder_id;
    private long document_id;

    public long getFolder_id() {
        return folder_id;
    }

    public void setFolder_id(long folder_id) {
        this.folder_id = folder_id;
    }

    public long getDocument_id() {
        return lavorazione_id;
    }

    public void setDocument_id(long document_id) {
        this.document_id = document_id;
    }
}


---------------------------------------------------------------------------

package org.hibernate;

import java.util.List;

import org.hibernate.cfg.Configuration;

public class OracleConnection {

    public static void main(String[] args) {
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();

        String hql = "from ld_folder_scan where folder_id = 1";
        List<ld_scatole_scan> list = (List<ld_folder_scan>)session.createQuery(hql).getResultList();
        for(ld_folder_scan sca : list){
            for(int i=0;i<sca.getLd_folder_scan_content().size();i++){
                System.out.println("Folder Name::"+sca.getFolder_name() + " Document Id::" +sca.getLd_folder_scan_content().get(i).getDocument_id());
            }
        }
        session.getTransaction().commit();
    }
}

我通过调试得到的结果:

Folder Name::F001 Document Id::1
Folder Name::F001 Document Id::1
Folder Name::F001 Document Id::1
Folder Name::F001 Document Id::1

我想要得到什么:

Folder Name::F001 Document Id::1
Folder Name::F001 Document Id::2
Folder Name::F001 Document Id::3
Folder Name::F001 Document Id::4

我哪里错了?

谢谢。

最佳答案

您错过了子表的多对一映射。在父表中,您已将其设置为一对多。同样,您还必须配置子表。

关于java - Hibernate 连接两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49255518/

相关文章:

java - 什么是初始化 block ?

javascript - jQuery AJAX 触发太快

javascript - JQuery:追加/困难之后

使用 mysql 的 Hibernate 配置给出错误 - SAXParseException

java - Spring 事务内的 Hibernate 实体生命周期和 session 生命周期

java - Excel 自动化与 Cucumber 框架集成

Java - 循环并通过类实例的变量

java - 生成从最小值到最大值的随机整数?

javascript - 如何使用响应式设计使 div 的高度和宽度相同?

hibernate - Grails 1.1 应用程序的集成测试在 Grails 2.0.3 中不起作用。会不会是 GORM 配置问题?