从Hibernate 3迁移应用程序,尝试在JPA 2中映射此关系,但不确定它是如何处理的。在原始应用程序中有以下两个对象:
TemplateCourse.java
CourseCatCode.java
TemplateCourse
对CourseCatCode
有多对一的引用。 TemplateCourse
中没有外键,而是使用公式根据某些条件从第3个表中选择ID,并加入相应的CourseCatCode。
在hibernate 3应用程序中,映射如下所示:
<many-to-one name="courseCatCode" class="CourseCatCode" not-null="false" insert="false" update="false" lazy="false">
<formula><![CDATA[
(
select
smdp_asbch_course.cat_code_id
from
smdp_asbch_course smdp_asbch_course,
smdp_template_requirement smdp_template_requirement,
smdp_template smdp_template,
smdp_degree smdp_degree
where
smdp_degree.degree_id = smdp_template.degree_id
and smdp_template.template_id = smdp_template_requirement.template_id
and smdp_template_requirement.requirement_id = requirement_id
and smdp_asbch_course.school_id = smdp_degree.school_id
and smdp_degree.degree_type_code = smdp_asbch_course.degree_type_code
and smdp_asbch_course.before_date > SYSDATE
and translate(upper(smdp_asbch_course.course_number), 'A-/ ', 'A') = translate(upper(course_number), 'A-/ ', 'A')
)
]]></formula>
</many-to-one>
我们可以在JPA 2中做类似的事情来映射这种关系吗?我们的JPA 2提供程序也是Hibernate,所以如果它需要特定的hibernate,那就没关系。
答案 0 :(得分:0)
你试过吗
@JoinFormula(referencedColumnName="cat_code_id", value="(select smdp_asbch_course.cat_code_id " +
"from smdp_asbch_course " + smdp_asbch_course, " +
"smdp_template_requirement smdp_template_requirement, " +
"smdp_template " +
"smdp_template, " +
"smdp_degree smdp_degree " +
"where smdp_degree.degree_id = smdp_template.degree_id " +
" and smdp_template.template_id = smdp_template_requirement.template_id " +
" and smdp_template_requirement.requirement_id = requirement_id " +
" and smdp_asbch_course.school_id = smdp_degree.school_id " +
" and smdp_degree.degree_type_code = smdp_asbch_course.degree_type_code " +
" and smdp_asbch_course.before_date > SYSDATE " +
" and translate(upper(smdp_asbch_course.course_number), 'A-/ ', 'A') = translate(upper(course_number), 'A-/ ', 'A'))")