JPA 2多对一配方衍生外键

时间:2017-09-20 13:18:34

标签: java oracle hibernate jpa

从Hibernate 3迁移应用程序,尝试在JPA 2中映射此关系,但不确定它是如何处理的。在原始应用程序中有以下两个对象:

TemplateCourse.java

CourseCatCode.java

TemplateCourseCourseCatCode有多对一的引用。 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,那就没关系。

1 个答案:

答案 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'))")