package io.requery.test.model;
import io.requery.CascadeAction;
import io.requery.Column;
import io.requery.Entity;
import io.requery.ForeignKey;
import io.requery.Generated;
import io.requery.Index;
import io.requery.JunctionTable;
import io.requery.Key;
import io.requery.Lazy;
import io.requery.ManyToMany;
import io.requery.Naming;
import io.requery.Nullable;
import io.requery.OneToMany;
import io.requery.OneToOne;
import io.requery.PostDelete;
import io.requery.PostInsert;
import io.requery.PostLoad;
import io.requery.PostUpdate;
import io.requery.PreDelete;
import io.requery.PreInsert;
import io.requery.PreUpdate;
import io.requery.query.MutableResult;
import io.requery.test.EntityState;
import java.io.Serializable;
import java.net.URL;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.UUID;
@Entity
public class AbstractPerson implements Serializable {
@Key @Generated
protected int id;
@Index(value = "name_email_index")
protected String name;
@Index(value = {"name_email_index", "email_index"})
protected String email;
protected Date birthday;
protected String description;
@Nullable
protected int age;
@ForeignKey
@OneToOne(cascade = {CascadeAction.DELETE, CascadeAction.SAVE})
protected Address address;
@OneToMany(mappedBy = "owner", cascade =
{CascadeAction.DELETE, CascadeAction.SAVE})
protected MutableResult<Phone> phoneNumbers;
@OneToMany(mappedBy = "owner")
protected Set<Phone> phoneNumbersSet;
@OneToMany
protected List<Phone> phoneNumbersList;
@ManyToMany(mappedBy = "members")
protected MutableResult<Group> groups;
@ManyToMany(mappedBy = "owners")
protected MutableResult<Group> ownedGroups;
@ManyToMany(mappedBy = "id")
@JunctionTable
protected Set<Person> friends;
@Lazy
protected String about;
@Column(unique = true)
@Naming(getter = "getUUID", setter = "setUUID")
protected UUID uuid;
protected URL homepage;
protected String picture;
private EntityState previous;
private EntityState current;
public EntityState getPreviousState() {
return previous;
}
public EntityState getCurrentState() {
return current;
}
private void setState(EntityState state) {
this.previous = current;
this.current = state;
}
@PreInsert
public void onPreInsert() {
setState(EntityState.PRE_SAVE);
}
@PostInsert
public void onPostInsert() {
setState(EntityState.POST_SAVE);
}
@PostLoad
public void onPostLoad() {
setState(EntityState.POST_LOAD);
}
@PreUpdate
public void onPreUpdate() {
setState(EntityState.PRE_UPDATE);
}
@PostUpdate
public void onPostUpdate() {
setState(EntityState.POST_UPDATE);
}
@PreDelete
public void onPreDelete() {
setState(EntityState.PRE_DELETE);
}
@PostDelete
public void onPostDelete() {
setState(EntityState.POST_DELETE);
}
}