2013-04-17 64 views
0

的實體我有兩個表:emp和emp_attributes 其中我想有一個條件加入有條件加入的視圖的OFBiz

EMP

empno | ename | location | salary 
    1 | Josh | LA | 1200 
    2 | Joe | NY | 1000 
    3 | George | LA | 1500 

emp_attributes

empno | attr_name | attr_value 
    1 | appraised | 10% 
    1 | basicSalary| 700 
    2 | basicSalary| 600 
    2 | appraised | 12% 
    2 | spouseName | Amelia 
    3 | appraised | 25% 
    3 | basicSalary| 700 
    3 | spouseName | Lucy 

我想對於像

SELECT E.*, EA1.ATTR_VALUE AS APPRAISAL_RATE, EA2.ATTR_VALUE AS SPOUSE_NAME FROM EMP E 
LEFT JOIN EMP_ATTRIBUTES EA1 ON E.EMPNO=EA1.EMPNO AND EA1.ATTR_NAME='appraised' 
LEFT JOIN EMP_ATTRIBUTES EA2 ON E.EMPNO=EA2.EMPNO AND EA2.ATTR_NAME='spouseName'; 

Expected Output 
empno | ename | location | salary | APPRAISAL_RATE | SPOUSE_NAME 
    1 | Josh | LA | 1200 |  10%  | NULL 
    2 | Joe | NY | 1000 |  12%  | Amelia 
    3 | George | LA | 1500 |  25%  | Lucy 

我試圖

<view-entity entity-name="EmpAndEmpAttributesAndEmpAttributes" 
      package-name="com.proj.employee" 
      title="Employee and Employee Attribute and Employee Attribute"> 
    <member-entity entity-alias="E" entity-name="Emp"/> 
    <member-entity entity-alias="EA1" entity-name="EmpAttributes"/> 
    <member-entity entity-alias="EA2" entity-name="EmpAttributes"/> 

    <alias-all entity-alias="E"/> 
    <alias-all entity-alias="EA1"/> 
    <alias-all entity-alias="EA2"/> 

    <view-link entity-alias="E" rel-entity-alias="EA1" rel-optional="true"> 
     <key-map field-name="empno"/> 
    </view-link> 
    <entity-condition> 
     <condition-expr entity-alias="EA1" field-name="attrName" operator="equals" value="appraised" /> 
    </entity-condition> 

    <view-link entity-alias="E" rel-entity-alias="EA2" rel-optional="true"> 
     <key-map field-name="empno"/> 
    </view-link> 
    <entity-condition> 
     <condition-expr entity-alias="EA1" field-name="attrName" operator="equals" value="spouseName" /> 
    </entity-condition> 
</view-entity> 

有人讓我知道錯了我在幹嘛?或任何其他方式來解決這個問題...

回答

1

該條件應放在「視圖鏈接」節點內,因爲它不是「where」條件,它是「連接」條件。

<view-link entity-alias="E" rel-entity-alias="EA1" rel-optional="true"> 
    <key-map field-name="empno"/> 
    <entity-condition> 
     <condition-expr entity-alias="EA1" field-name="attrName" operator="equals" value="appraised" /> 
    </entity-condition> 
</view-link> 
0

看起來這是一個已知問題,在ofbiz的某些版本的實體條件不查看鏈接內工作,請參閱:https://issues.apache.org/jira/browse/OFBIZ-4781

可以證實這一點通過檢查由GeneralDao產生實際的SQL .java,我遇到了類似的問題,試圖做同樣的動態視圖實體。