package org.tests.model.basic; import io.ebean.annotation.Cache; import io.ebean.annotation.ChangeLog; import io.ebean.annotation.ChangeLogInsertMode; import io.ebean.annotation.DbComment; import io.ebean.annotation.DbEnumValue; import io.ebean.annotation.DocEmbedded; import io.ebean.annotation.DocStore; import io.ebean.annotation.JsonIgnore; import io.ebean.annotation.Where; import org.tests.model.basic.finder.CustomerFinder; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Transient; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import java.sql.Date; import java.util.ArrayList; import java.util.List; import java.util.concurrent.locks.ReentrantLock; /** * Customer entity bean. */ @NamedQueries( value = { @NamedQuery(name = "name", query = "select(name) order by name"), @NamedQuery(name = "withStatus", query = "select(name,status) order by name") } ) @NamedQuery(name = "withContacts", query = "fetch contacts (firstName, lastName) where id = :id") @Cache(enableQueryCache = true) @DocStore @ChangeLog(inserts = ChangeLogInsertMode.EXCLUDE, updatesThatInclude = {"name", "status"}) @Entity @Table(name = "o_customer") @DbComment("Holds external customers") public class Customer extends BasicDomain { private static final long serialVersionUID = 1L; public static final CustomerFinder find = new CustomerFinder(); /** * EnumValue is an Ebean specific mapping for enums. */ public enum Status { NEW("N"), ACTIVE("A"), INACTIVE("I"); String dbValue; Status(String dbValue) { this.dbValue = dbValue; } @DbEnumValue public String getValue() { return dbValue; } } @Transient Boolean selected; @JsonIgnore //@Expose(deserialize = false, serialize = false) @Transient ReentrantLock lock = new ReentrantLock(); @DbComment("status of the customer") Status status; @NotNull @Size(max = 40) String name; @DbComment("Short notes regarding the customer") @Size(max = 100) String smallnote; @DbComment("Join date of the customer") @NotNull(groups = {ValidationGroupSomething.class}) Date anniversary; @DocEmbedded(doc = "*,country(*)") @ManyToOne(cascade = CascadeType.ALL) Address billingAddress; @DocEmbedded(doc = "*,country(*)") @ManyToOne(cascade = CascadeType.ALL) Address shippingAddress; @OneToMany(mappedBy = "customer") @Where(clause = "${ta}.order_date is not null") List<Order> orders; @OneToMany(mappedBy = "customer", cascade = CascadeType.ALL) List<Contact> contacts; @Override public String toString() { return id + " " + status + " " + name; } /** * Return name. */ public String getName() { return name; } /** * Set name. */ public void setName(String name) { this.name = name; } /** * Return billing address. */ public Address getBillingAddress() { return billingAddress; } /** * Set billing address. */ public void setBillingAddress(Address billingAddress) { this.billingAddress = billingAddress; } /** * Return status. */ public Status getStatus() { return status; } /** * Set status. */ public void setStatus(Status status) { this.status = status; } /** * Return shipping address. */ public Address getShippingAddress() { return shippingAddress; } /** * Set shipping address. */ public void setShippingAddress(Address shippingAddress) { this.shippingAddress = shippingAddress; } /** * Return orders. */ public List<Order> getOrders() { return orders; } /** * Set orders. */ public void setOrders(List<Order> orders) { this.orders = orders; } public Boolean getSelected() { return selected; } public void setSelected(Boolean selected) { this.selected = selected; } public ReentrantLock getLock() { return lock; } public String getSmallnote() { return smallnote; } public void setSmallnote(String smallnote) { this.smallnote = smallnote; } public Date getAnniversary() { return anniversary; } public void setAnniversary(Date anniversary) { this.anniversary = anniversary; } public List<Contact> getContacts() { return contacts; } public void setContacts(List<Contact> contacts) { this.contacts = contacts; } public void addContact(Contact contact) { if (contacts == null) { contacts = new ArrayList<>(); } contacts.add(contact); } }