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_Eclipselink - Fatal编程技术网

Java 如何使用EclipseLink为公共接口下的独立实体声明接口描述符?

Java 如何使用EclipseLink为公共接口下的独立实体声明接口描述符?,java,jpa,eclipselink,Java,Jpa,Eclipselink,在这种情况下,我们需要在一个属性下关联不同的实体,并在查询中使用该属性。 该项目使用JPA和EclipseLink作为实施 示例代码说明了这一点:(实际问题要复杂得多) 接口I1{ public int getData(); } @实体 类E1实现I1{ 公共int id; 公共字符串数据; public int getData(){return someData;} } @实体 类E2实现I1{ 公共int id; 公共字符串someOtherData; public int getData(

在这种情况下,我们需要在一个属性下关联不同的实体,并在查询中使用该属性。 该项目使用JPAEclipseLink作为实施

示例代码说明了这一点:(实际问题要复杂得多)

接口I1{
public int getData();
}
@实体
类E1实现I1{
公共int id;
公共字符串数据;
public int getData(){return someData;}
}
@实体
类E2实现I1{
公共int id;
公共字符串someOtherData;
public int getData(){return someOtherData;}
}
@实体
课堂测试{
//我们希望使用I1接口将其当作一个真实的实体来处理
//由于这是一个单一的映射,我们不能使用日食
//可变单子映射
//这样的事情应该是可能的
//从测试t中选择t.refToEntities,其中t.data=='Some String'
公共列表参考实体;
}
由于历史原因,这些实体不共享继承关系,但它们具有公共数据,这些数据在公共接口下被抽象出来。 我们现在面临的问题是,我们有另一个实体,它希望在一对多关系中使用公共接口与这些实体关联。理想情况下,应该可以使用JPQL查询关系,但是使用EclipseLink特定的方法也可以

总而言之,我们希望为一个一个域关系建立一个可变的一个域映射

到目前为止,我找到的文档表明,可以为接口构建一个关系描述符,但不清楚如何在JPA场景中将该描述符引入会话,以及如何设置接口策略,以便将接口用作会话的通用类型基础实体


那么,有人知道如何做到这一点,或者可以告诉我们如何使用工作代码吗?

您最好使用继承而不是接口

或者有每个实体类型的列表,而不仅仅是接口

EclipseLink仅支持VariableOneToOne而不支持VariableOneToMany,请为此记录增强请求

您可以使用SessionCustomizer为接口定义RelationalDescriptor,只需实例化它,使用descriptor.setJavaInterface(Il.class)设置接口并添加任何公共查询键


您可能会将此接口用作OneToNameApping(在代码中定义)的目标。不过,您将无法在JPQL中跨它连接。

您最好使用继承而不是接口

或者有每个实体类型的列表,而不仅仅是接口

EclipseLink仅支持VariableOneToOne而不支持VariableOneToMany,请为此记录增强请求

您可以使用SessionCustomizer为接口定义RelationalDescriptor,只需实例化它,使用descriptor.setJavaInterface(Il.class)设置接口并添加任何公共查询键

您可能会将此接口用作OneToNameApping(在代码中定义)的目标。不过,您将无法在JPQL中跨它加入

interface I1 {
  public int getData();
}

@Entity
class E1 implements I1 {
  public int id;
  public String someData;

  public int getData() { return someData; }
}

@Entity
class E2 implements I1 {
  public int id;
  public String someOtherData;

  public int getData() { return someOtherData; }
}


@Entity
class Test {
  // we want to handle this as if it was a real entity using the I1 Interface
  // Since it is a oneToMany mapping we cannot use eclipselinks
  // VariableOneToOne mapping
  // something like this should be possible 
  // SELECT t.refToEntities From Test t where t.data == 'Some String'  
  public List<I1> refToEntities;
}