我有一个遗留数据库,由于它连接到第三方应用程序而无法更改。
我正在为新应用程序使用的一个查询如下所示:
SELECT 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
FROM INCIDENT
WHERE...
我正在试图找出如何将该查询转换为一组Hibernate实体,但我是一个Hibernate新手。我有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”不是代码实体中的列名。 谢谢你的帮助!
答案 0 :(得分:0)
您应该创建一个视图作为您描述的查询,并定义一个映射到该视图的实体。
如果您仍然需要在“事件”中映射“代码”实体,请查看以下示例:
@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”是映射到视图的实体,符合 CODE_TYPE ='A'。 “CodeB”与上述配方相同。