![](/img/trans.png)
[英]Can we implement C4 garbage collection mechanism in our own JVM?Or we will have to use only AZUL JVM(Zing)
[英]How we use our own collection for Lazy loading in eclipseLink?
我想使用MyCollection實現java提供的收集接口。 對於EAGER加載,它工作正常,但對於延遲加載,eclipselink使用其自己的implemntation(IndirectList)。 可以使用MyCollection進行延遲加載嗎?
MyCollection代碼在這里:
package com.alta.convertor;
import java.util.Collection;
import java.util.Iterator;
import java.util.Vector;
public class MyCollection<E> implements Collection<E>,Cloneable{
Collection<E> collection;
@SuppressWarnings({ "unchecked", "rawtypes" })
public MyCollection() {
this(new Vector());
}
public MyCollection(Collection<E> collection) {
this.collection=collection;
}
@Override
public int size() {
return collection.size();
}
@Override
public boolean isEmpty() {
return collection.isEmpty();
}
@Override
public boolean contains(Object o) {
return collection.contains(o);
}
@Override
public Iterator<E> iterator() {
return collection.iterator();
}
@Override
public Object[] toArray() {
return collection.toArray();
}
@Override
public <T> T[] toArray(T[] a) {
return collection.toArray(a);
}
@Override
public boolean add(E e) {
return false;
}
@Override
public boolean remove(Object o) {
return collection.remove(o);
}
@Override
public boolean containsAll(Collection<?> c) {
return collection.containsAll(c);
}
@Override
public boolean addAll(Collection<? extends E> c) {
return collection.addAll(c);
}
@Override
public boolean removeAll(Collection<?> c) {
return collection.removeAll(c);
}
@Override
public boolean retainAll(Collection<?> c) {
return collection.retainAll(c);
}
@Override
public void clear() {
collection.clear();
}
}
我的實體類為:
@Entity
public class Person implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="personid")
private Long personId;
private String firstName;
private String lastName;
private String email;
@OneToMany(cascade = CascadeType.ALL,mappedBy="person",targetEntity=Address.class,fetch=FetchType.EAGER)
私有MyCollection addressArray;
public Person() {
}
public Person(String firstName, String lastName, String email) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public MyCollection<Address> getAddressArray() {
return addressArray;
}
public void setAddressArray(MyCollection<Address> address) {
this.addressArray = address;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Long getPersonId() {
return personId;
}
public void setPersonId(Long personId) {
this.personId = personId;
}
}
目前不是,您需要使用其中一個收集接口來允許LAZY(列表,設置,映射)。 如果使用EAGER,則可以使用自己的集合類型。
但是,我目前正在研究此問題,很可能很快會檢查到2.6的修復程序,
https://bugs.eclipse.org/bugs/show_bug.cgi?id=411819
通常,如果可以的話,最好還是使用收集接口。 您也可以將關系包裝在代表您的收藏的Embeddable中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.