2011-12-04 22 views
1

我有一個帶有InheritanceType.JOINED的域模型。JPA如何使用InheritanceType.JOINED配置外部聯接

@Table(name = "S_MC_CC_RAPPORTI") 
@Inheritance(strategy = InheritanceType.JOINED) 
@DiscriminatorColumn(name = "COD_TIPORAPPORTO") 
public class RapportoImpl implements Rapporto, Cloneable { 

    @Id 
    @Column(name = "COD_RAPPORTO") 
    protected Long codiceRapporto; 

和子類:

@Entity 
@Table(name = "CARTE") 
@DiscriminatorValue("4 ") 
public class CartaImpl extends RapportoImpl implements Carta, Cloneable { 

    private static final long serialVersionUID = 1723366781345274590L; 

這個偉大的工程,直到DB是一致的。

RAPPORTO

Id COD_TIPORAPPORTO 
1  4 

全權

Id Description 
1  Carta 

所以,當我打開一個Rapporto通過ID 1所有的偉大工程。但是,當數據庫不一致時,所有的工作都不好。
想象一下,我沒有更多的子表Carte的記錄。當我嘗試加載它時,我得到一個null對象,因爲JPA在超級表和子表之間建立內部聯接。 是否有可能通過在子表上建立外連接的方式進行配置

+0

所以這是一種情況,其中父表具有具有特定ID的行,但沒有子錶行具有父行的FK? –

+0

是的,這是情況。我必須在我的生產環境中處理這些情況。 –

+0

可以執行一個特別要求超類的查詢嗎? –

回答

1

總結 - 如果您的JPA提供程序是EclipseLink而不是there is a way,則表示在聯接中獲取子對象時應該使用OUTER JOIN繼承戰略。

+1

請注意,這是查詢根或分支類與子類,而不是一個特定的類,所以可能不理想。你可以嘗試,http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Entities/SecondaryTable#Advanced_Multiple_Table_Configuration,但一般來說,你應該考慮改變你的模型或修復你的數據 – James

相關問題