Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有鉴别器列的对象的Eclipselink延迟加载问题_Java_Jpa_Join_Eclipselink_Discriminator - Fatal编程技术网

Java 具有鉴别器列的对象的Eclipselink延迟加载问题

Java 具有鉴别器列的对象的Eclipselink延迟加载问题,java,jpa,join,eclipselink,discriminator,Java,Jpa,Join,Eclipselink,Discriminator,我们的应用程序中有以下层次结构: @MappedSuperclass public abstract class AbstractDemandOrMeasureBE { } @Entity @Inheritance @DiscriminatorColumn(name = "DISCRIMINATOR", discriminatorType = DiscriminatorType.INTEGER) @Table(name = "V_VIEW2") public abstract class Ab

我们的应用程序中有以下层次结构:

@MappedSuperclass
public abstract class AbstractDemandOrMeasureBE {
}

@Entity
@Inheritance
@DiscriminatorColumn(name = "DISCRIMINATOR", discriminatorType = DiscriminatorType.INTEGER)
@Table(name = "V_VIEW2")
public abstract class AbstractDemandOrConcreteMeasureBE extends AbstractDemandOrMeasureBE {
    @Column(name = "VC_ID")
    private Long vcId;
}

@Entity
@DiscriminatorValue("2")
public class MinimalDemandBE extends AbstractDemandOrConcreteMeasureBE {
   ..
}

@Entity
@DiscriminatorValue("1")
@HasRelationsAnnotatedAsLazyLoaded
public class ValidationMeasureBE extends AbstractDemandOrConcreteMeasureBE {
..
}
在另一个对象中,我尝试加载这些实体,如下所示:

@Table(name = "V_VIEW2")
public class VCBE extends SomeVeryAbstractBE {

    @OneToMany(fetch = FetchType.LAZY)
    @JoinColumn(name = "VC_ID")
    private List<ValidationMeasureBE> validationMeasures;
    public transient static final String ATTRIBUTE_VALIDATION_MEASURES = "validationMeasures";

    @OneToMany(fetch = FetchType.LAZY)
    @JoinColumn(name = "VC_ID")
    private List<MinimalDemandBE> minimalDemands;
    public transient static final String ATTRIBUTE_MINIMAL_DEMANDS = "minimalDemands";
正如我所看到的,查询中没有鉴别器约束,为什么


对这种行为有什么想法吗?根据鉴别器的值,我如何告诉eclipselink加载集合?

您可以包括JPQL查询和用于获取此SQL的提示吗

那么,您的意思是,当您使用连接获取而不是左连接获取时,它可以工作

这似乎是一个bug,在使用外部连接时没有包含继承鉴别器表达式。如果是这种情况,请为此记录一个bug并投票赞成


不过你的模特很奇怪。为什么要将这两个子类拆分为两个独立的关系?有一个会更有效率。或者,如果确实拆分了它们,则应该使用不同的外键,而不是相同的外键。为两个不同的关系共享相同的外键可能不是一个好主意。

能否显示查询、为其生成的SQL以及版本?您是否在任何集合上使用fetch联接?谢谢您的回答!我编辑了最初的问题。希望这能提供更多信息。嗨,詹姆斯!谢谢你的回答。对不起,我放错地方了。我没有使用join-fetch,它仍然是左join-fetch,但具有不同的提示值(集合不同)。我明天就把它放进去试试。关于模型:我是否正确理解您的建议,例如,您的建议在ValidationMeasure中包含VC_ID,在MinimalDemand中包含MD_VC_ID,然后在VCBE中使用这些外键?
    SELECT * FROM V_VIEW1 t1 
        LEFT OUTER JOIN V_VIEW0 t0 ON (t0.PP_D = t1.ID) 
        LEFT OUTER JOIN V_VIEW2 t2 ON (t2.VC_ID = t0.ID) 
        WHERE (((t1.ID = ?) AND (t1.HP_ID = ?)) 
        AND t1.HP_IS IN (SELECT t3.ID FROM V_VIEW t3 WHERE (t3.HWPG_ID = ?)))
bind => [3 parameters bound]