For example:
@AutoProperty
@Entity
public class ReferringItem implements Serializable {
@Id
private long id;
// Element collection is required for basic types
// and embeddables. Such elements are stored in
// a separate table.
@ElementCollection
private Collection<AnEmbeddable> myCollection
= new ArrayList<AnEmbeddable>();
// By default, data is fetched lazily (when
// used for the first time). Making it eager
// loads the data as soon as possible.
@ElementCollection(fetch=FetchType.EAGER)
private Set<Long> mySet = new HashSet<Long>();
// When not using generics, one must specify
// the collection type (i.e., target class)
@ElementCollection(targetClass=String.class)
private List myList = new ArrayList();
// Element collection is required when the map
// value is a basic type or an embeddable
@ElementCollection
private Map<String,AnEmbeddable> map
= new HashMap<String,AnEmbeddable>();
// Setter & Getter, Constructor...
}
@AutoProperty
JPA.INSTANCE.clear();
ReferringItem ri = new ReferringItem();
ArrayList<AnEmbeddable> coll
= new ArrayList<AnEmbeddable>();
coll.add(new AnEmbeddable("Coll1"));
coll.add(new AnEmbeddable("Coll2"));
ri.setMyCollection(coll);
Set<Long> set = new HashSet<Long>();
set.add(Long.MIN_VALUE);
set.add(33l);
ri.setMySet(set);
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
ri.setMyList(list);
Map<String,AnEmbeddable> map
= new HashMap<String,AnEmbeddable>();
map.put("prt", new AnEmbeddable("Map1"));
map.put("frd", new AnEmbeddable("Map2"));
ri.setMap(map);
JPA.INSTANCE.save(ri);
JPA.INSTANCE.clear();
ReferringItem retr = JPA.INSTANCE.get(
ReferringItem.class, ri.getId());
System.out.println("Source == Retrieved: " + (ri==retr));
System.out.println("Retrieved Collection:");
for (AnEmbeddable ae : retr.getMyCollection()) {
System.out.println(ae);
}
System.out.println("Retrieved Set:");
for (Long l : retr.getMySet()) {
System.out.println(l);
}
System.out.println("Retrieved List:");
for (Iterator it = retr.getMyList().iterator(); it.hasNext();) {
System.out.println(it.next());
}
System.out.println("Retrieved Map:");
for (Map.Entry<String,AnEmbeddable> e : map.entrySet()) {
System.out.println(e.getKey() + " - " + e.getValue());
}
Source == Retrieved: false
Retrieved Collection:
AnEmbeddable{s: {Coll1}}
AnEmbeddable{s: {Coll2}}
Retrieved Set:
-9223372036854775808
33
Retrieved List:
aaa
bbb
Retrieved Map:
prt - AnEmbeddable{s: {Map1}}
frd - AnEmbeddable{s: {Map2}}
The above example is available from Github in the JPA directory. It relies on Pojomatic too. Some errors messages will be displayed because of a known and harmless issue.
No comments:
Post a Comment