package jpql.query;

import java.util.Date;
import java.util.Map;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@NamedQueries
({
   @NamedQuery(name="alias.param1", query="SELECT a.alias FROM Alias AS a WHERE (a.alias IS NULL AND :param1 IS NULL) OR a.alias = :param1"),
   @NamedQuery(name="alias.key1",   query="SELECT KEY(k) FROM Alias a JOIN a.ids k"),
   @NamedQuery(name="alias.key2",   query="SELECT KEY(e).firstName FROM Alias a JOIN a.addresses e"),
   @NamedQuery(name="alias.value1", query="SELECT VALUE(v) FROM Alias a JOIN a.ids v"),
   @NamedQuery(name="alias.value2", query="SELECT v FROM Alias a JOIN a.ids v"),
   @NamedQuery(name="alias.value3", query="SELECT VALUE(e).zip.code FROM Alias a JOIN a.addresses e"),
   @NamedQuery(name="alias.entry",  query="SELECT ENTRY(e) FROM Alias a JOIN a.ids e")
})
@SuppressWarnings("unused")
public class Alias {

	@Id
	private int id;
	private String alias;
	@ElementCollection
	@Temporal(TemporalType.DATE)
	private Map<String, Date> ids;
	private Customer customer;
	@JoinColumn(name="ID", referencedColumnName="ALIAS.ALIAS")
	private Map<Customer, Address> addresses;
}