JPA如何使用InheritanceType.JOINED配置外部联接
我有一个具有InheritanceType.JOINED的域模型JPA如何使用InheritanceType.JOINED配置外部联接,inheritance,jpa,outer-join,Inheritance,Jpa,Outer Join,我有一个具有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 =
@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保持一致之前,这非常有效
表REPARTO
Id COD_TIPORAPPORTO
1 4
表点菜
Id Description
1 Carta
因此,当我通过id 1加载一个rappo
时,一切都很好。但是当数据库不一致时,所有的工作都不好。假设我在子表
Carte
上没有更多的记录。当我尝试加载它时,我得到一个null
对象,因为JPA在超级表和子表之间进行内部联接。
如果您的JPA提供程序是EclipseLink,则可以在获取联接继承策略中的子对象时使用外部联接。总结-如果您的JPA提供程序是EclipseLink,则在获取子对象时使用外部联接。总结-如果您的JPA提供程序是EclipseLink,则在在联接继承策略中获取子对象。因此,这种情况下,父表具有具有特定ID的行,但没有子表行具有与父行的FK?是的,就是这种情况。我必须在我的生产环境中处理这样的情况。执行一个特别要求超类的查询会有帮助吗?我在entitymanager上查询超类ase,如下所述:'reportoimpl reportoimpl=entitymanager.find(reportoimpl.class,5l);assertNotNull(reportoimpl);'在这种情况下,
reportoimpl
为空?因此,这是一种情况,其中父表具有具有特定ID的行,但没有子表行具有到父行的FK?是的,这是一种情况。我必须在我的生产环境中处理这样的情况。执行一个特别要求超类的查询会有帮助吗?我在entitymanager上查询超类ase,如下所述:'reportoimpl reportoimpl=entitymanager.find(reportoimpl.class,5l);assertNotNull(reportoimpl);'在这种情况下,reportoimpl
为空?请注意,这是用于查询具有子类的根类或分支类,而不是特定类,因此可能不理想。您可以尝试,但一般来说,您应该考虑更改模型或修复DATANOTET,这是为了查询具有子类的根类或分支类,而不是特定类,因此可能不太理想。您可以尝试,但一般来说,您应该考虑更改模型或修复数据。