我是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;
...
一旦我有了这种形式的数据,我计划将类序列化为Coherence缓存。
但是我使用的注释实际上并没有编译......
感谢任何帮助。
..更新
到目前为止,我设法提出的最好的是
@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;
然而,这导致了2个查询......这实际上并不是我所追求的。
干杯 富
答案 0 :(得分:2)
我无法对此进行测试,但是可能引入可嵌入对象可能会减少查询次数。像这样:
@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;
}
}
with embeddable看起来像这样
@Embeddable
@Table(name = "FCS_ISSR_OBG")
public class REF_OBGDto {
@Column(name = "REF_OBG")
public Long ref_obg;
}
只有在您特别要求时才会收到该集合。对不起,答案很简单,但我只能在这里测试一下。
答案 1 :(得分:2)
要强制使用父查询获取任何关系,可以在EclipseLink中使用@JoinFetch注释。
尽管在单独的查询中阅读集合可能是最佳解决方案,具体取决于数据。
您还可以在EclipseLink中使用@BatchFetch批量获取关系(仍然是2个查询,但不是n + 1个查询)。我最近在我的博客中对批处理和连接提取进行了比较,参见