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

Java 如何为以下内容定义EclipseLink注释?

Java 如何为以下内容定义EclipseLink注释?,java,jpa,eclipselink,oracle-coherence,Java,Jpa,Eclipselink,Oracle Coherence,我对EclipseLink的世界相对来说比较陌生,我一直在阅读文档,但是我在尝试表示下表时遇到了一个真正的问题 PTY_NO | REF_OBG 6544 45663 6544 1234 6544 97543 6544 1123 6544 77897 理想情况下,我希望将上述数据表示如下 @Entity @Table(name="FCS_ISSR_OBG") public class fcs_issr_obg impl

我对EclipseLink的世界相对来说比较陌生,我一直在阅读文档,但是我在尝试表示下表时遇到了一个真正的问题

PTY_NO  |   REF_OBG
6544        45663
6544        1234
6544        97543
6544        1123
6544        77897
理想情况下,我希望将上述数据表示如下

@Entity
@Table(name="FCS_ISSR_OBG")
public class fcs_issr_obg implements Serializable  {

    @Id
    @Column(name="PTY_NO")
    private long pty_no;

    @Column(name="REF_OBG")
    private List<long> ref_obg;

...
@实体
@表(name=“FCS_ISSR_OBG”)
公共类fcs_issr_obg实现可序列化{
@身份证
@列(name=“PTY_NO”)
私人长屋;
@列(name=“REF_OBG”)
私人列表参考obg;
...
一旦我有了这种形式的数据,我计划将该类序列化到一致性缓存中

然而,我使用的注释实际上并没有编译

任何帮助都将受到感激

…更新

到目前为止,我能想到的最好的办法是

@Entity
@Table(name="FCS_ISSR_OBG")
public class fcs_issr_obg implements Serializable, PortableObject {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="PTY_NO")
    private long pty_no;

    @ElementCollection(targetClass = Long.class, fetch = EAGER)
    @CollectionTable(
            name = "FCS_ISSR_OBG",
            joinColumns=@JoinColumn(name="PTY_NO")
            )
    @Column(name ="REF_OBG")
    private List<Long> collection;
@实体
@表(name=“FCS_ISSR_OBG”)
公共类fcs_issr_obg实现可序列化、可移植的对象{
私有静态最终长serialVersionUID=1L;
@身份证
@列(name=“PTY_NO”)
私人长屋;
@ElementCollection(targetClass=Long.class,fetch=EAGER)
@收集表(
name=“FCS_ISSR_OBG”,
joinColumns=@JoinColumn(name=“PTY_NO”)
)
@列(name=“REF_OBG”)
私人名单收集;
然而,这会导致两个查询…这并不是我真正想要的

干杯
Rich

我无法测试这一点,但引入可嵌入对象可能会减少查询计数。类似于:

@Entity
@Table(name = "FCS_ISSR_OBG")
public class FCS_ISSR_OBGDto implements Serializable {

  @Column(name = "PTY_NO", nullable = false)
  private Long pty_no;

  private List<REF_OBGDto> REF_OBGs = new ArrayList<REF_OBGDto>();

  @ElementCollection
  @CollectionTable(name = "FCS_ISSR_OBG", joinColumns = @JoinColumn(name = "PTY_NO"))
  @Column(name = "REF_OBG")
  public List<REF_OBGDto> getREF_OBGs() {
    return REF_OBGs;
  }
}

只有在您明确要求时才能获取集合。很抱歉回答不充分,但我只能在此处测试。

要强制使用父查询获取任何关系,可以在EclipseLink中使用@JoinFetch注释

尽管如此,根据数据的不同,在单独的查询中读取集合可能是最好的解决方案

您还可以在EclipseLink中使用@BatchFetch批量获取关系(仍然是2个查询,但不是n+1个查询)。我最近在博客中对批量获取和加入获取进行了比较,请参见


这是一个多对多联接表吗?它是一个表,没有主键。因此表内的映射是一对多的。感谢Gary,正如您在我的编辑中所看到的,看起来我们已经找到了类似的解决方案。查看文档(第2.2.5.3.3节),我不确定您是否有更好的()。也许最好继续使用两个查询版本,直到有更好的答案出现。这太棒了,詹姆斯,非常棒。这篇博文也不错。你和加里都回答了这个由两部分组成的问题,我感谢你们。
@Embeddable
@Table(name = "FCS_ISSR_OBG")
public class REF_OBGDto {

  @Column(name = "REF_OBG")
  public Long ref_obg;

}