//$Id$ package org.hibernate.test.annotations.fetch; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.OrderColumn; import javax.persistence.Table; import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; import org.hibernate.annotations.LazyCollection; import org.hibernate.annotations.LazyCollectionOption; /** * @author Emmanuel Bernard */ @Entity @Table(name = "Person") public class Person implements Serializable { // member declaration private int id; private String firstName; private String lastName; private String companyName; private Collection<Stay> stays; private Collection<Stay> oldStays; private Collection<Stay> veryOldStays; private List<Stay> orderedStay = new ArrayList<Stay>(); // constructors public Person() { } public Person(String firstName, String lastName, String companyName) { this.firstName = firstName; this.lastName = lastName; this.companyName = companyName; } // properties public String getCompanyName() { return companyName; } public void setCompanyName(String companyName) { this.companyName = companyName; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } // relationships @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "person") public Collection<Stay> getStays() { return this.stays; } public void setStays(List<Stay> stays) { this.stays = stays; } @OneToMany(cascade=CascadeType.ALL, mappedBy = "oldPerson") @LazyCollection(LazyCollectionOption.EXTRA) @Fetch(FetchMode.SUBSELECT) public Collection<Stay> getOldStays() { return oldStays; } public void setOldStays(Collection<Stay> oldStays) { this.oldStays = oldStays; } @OneToMany(cascade=CascadeType.ALL, mappedBy = "veryOldPerson") @Fetch(FetchMode.SELECT) public Collection<Stay> getVeryOldStays() { return veryOldStays; } public void setVeryOldStays(Collection<Stay> veryOldStays) { this.veryOldStays = veryOldStays; } @OneToMany(cascade=CascadeType.ALL) @LazyCollection(LazyCollectionOption.EXTRA) @Fetch(FetchMode.SUBSELECT) @OrderColumn(name="orderedStayIndex") public List<Stay> getOrderedStay() { return orderedStay; } public void setOrderedStay(List<Stay> orderedStay) { this.orderedStay = orderedStay; } // business logic public void addStay(Date startDate, Date endDate, String vessel, String authoriser, String comments) { Stay stay = new Stay( this, startDate, endDate, vessel, authoriser, comments ); addStay( stay ); } public void addStay(Stay stay) { Collection<Stay> stays = getStays(); if ( stays == null ) { stays = new ArrayList<Stay>(); } stays.add( stay ); this.stays = stays; } public void addOldStay(Date startDate, Date endDate, String vessel, String authoriser, String comments) { Stay stay = new Stay( this, startDate, endDate, vessel, authoriser, comments ); addOldStay( stay ); } public void addOldStay(Stay stay) { Collection<Stay> stays = getOldStays(); if ( stays == null ) { stays = new ArrayList<Stay>(); } stays.add( stay ); this.oldStays = stays; } public void addVeryOldStay(Date startDate, Date endDate, String vessel, String authoriser, String comments) { Stay stay = new Stay( this, startDate, endDate, vessel, authoriser, comments ); addVeryOldStay( stay ); } public void addVeryOldStay(Stay stay) { Collection<Stay> stays = getVeryOldStays(); if ( stays == null ) { stays = new ArrayList<Stay>(); } stays.add( stay ); this.veryOldStays = stays; } }