java - JPA/HIbernate : Joining 2 Entities Multiple Times

标签 java hibernate jpa join one-to-one

我有一个无法更改的遗留数据库,因为它已连接到第 3 方应用程序。

我正在为新应用程序处理的查询之一如下所示:

选择 COL1、COL2、COL3、CODE1、CODE2、 (SELECT CODE_DESC FROM CODETABLE WHERE CODE_TYPE='A' CODE=INCIDENT.CODE1) AS CODE_DESC1, (SELECT CODE_DESC FROM CODETABLE WHERE CODE_TYPE='B' CODE=INCIDENT.CODE2) AS CODE_DESC2 来自事件 哪里...

我正在尝试弄清楚如何将该查询转换为一组 Hibernate 实体,但我是 Hibernate 新手。我有 3 个问题:

  1. 如何在一对一关系中多次将一个实体连接到另一个实体? (子查询)
  2. 如何使用具有固定值 (CODE_TYPE='A') 的参数以一对一关系将一个实体连接到另一个实体?
  3. 是否可以使用注释来执行上述任一操作(因为我喜欢这些)?

这是我迄今为止尝试过但没有奏效的方法:

对象 1:

@Entity
@Table (name="Incident")
public class Incident {
    private String col1;
    private String col2;
    private String col3;
    private String code1;
    private String code2;
    private Code code_desc1;
    //private String code_desc2;
    /**
     * @param code_desc1 the code_desc1 to set
     */
    public void setCode_desc1(Code code_desc1) {
        this.code_desc1 = code_desc1;
    }
    /**
     * @return the code_desc1
     */
    @OneToOne
    @JoinTable(name="Codes",
            joinColumns=@JoinColumn(name="code1", referencedColumnName="CODE"),
            inverseJoinColumns=@JoinColumn(name="CODE_TYPE", referencedColumnName="'A'")
    )
    public Code getCode_desc1() {
        return code_desc1;
    }
// Rest of Getters & Setters...
}

对象 2:

@Entity
@Table (name="CODETABLE")
public class Codes {
    @Column(name="CODE_DESC") 
    private String codeDesc;
    @Column(name="CODE_TYPE")
    private String codeType;
    @Column(name="CODE")
    private String code;
// Getters & Setters
}

基本上,当我运行该程序时,它会提示“A”不是代码实体中的列名。 感谢您的帮助!

最佳答案

您应该创建一个 View 作为您描述的查询,并定义一个映射到该 View 的实体。

如果您仍然需要映射到“事件”的“代码”实体,请检查以下示例:

@Entity
@Table(name="incident")
public class Incident {
    @Id
    @Column(name="id")
    private Integer id;

    @OneToOne
    @JoinColumn(name="code1")
    private CodeA typeACode;
    @OneToOne
    @JoinColumn(name="code2")
    private CodeB typeBCode;

    public Incident() {}

    public CodeA getTypeACode() { return this.typeACode; }
    public CodeB getTypeBCode() { return this.typeBCode; }
}

“CodeA”是映射到 View 的实体,符合CODE_TYPE='A'。 “CodeB”与上面的配方相同。

关于java - JPA/HIbernate : Joining 2 Entities Multiple Times,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6631537/

相关文章:

java - 如何在更改全屏/底部导航时使用导航组件 navhostfragment

java - 如何在 Hibernate 中使用 pooled-lo 优化器

java - 为什么我的实体在 JPA 中持久化后仍然保持分离状态?

java - 为什么 Random 类不是静态的?

针对不同模块的 Java 粒度调试消息

java - Netbeans 的 Hibernate Unicode;为什么在db中保存为 "?????"

java - Peter Friese 的 Teneo 教程中的 NoClassDefFoundError

java - 神秘的 NullPointerException

java - 从 native 查询和转换中检索数据

java - Spring Boot 中内容类型为 application/x-www-form-urlencoded 的请求的自定义反序列化器