//$Id$
package org.hibernate.test.annotations.collectionelement;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.MapKeyColumn;
import javax.persistence.OrderColumn;
import javax.persistence.Table;
/**
* @author Emmanuel Bernard
*/
@Entity
@AttributeOverrides({
@AttributeOverride( name="characters.element", column = @Column(name="fld_character") ),
@AttributeOverride( name="scorePerNickName.element", column = @Column(name="fld_score") ),
@AttributeOverride( name="favoriteToys.element.brand.surname", column = @Column(name = "fld_surname"))}
)
@Table(name="tbl_Boys")
public class Boy {
private Integer id;
private String firstName;
private String lastName;
private Set<String> nickNames = new HashSet<String>();
private Set<String> hatedNames = new HashSet<String>();
private Set<String> preferredNames = new HashSet<String>();
private Map<String, Integer> scorePerNickName = new HashMap<String, Integer>();
private Map<String, Integer> scorePerPreferredName = new HashMap<String, Integer>();
private int[] favoriteNumbers;
private Set<Toy> favoriteToys = new HashSet<Toy>();
private Set<Character> characters = new HashSet<Character>();
private Map<String, FavoriteFood> foods = new HashMap<String,FavoriteFood>();
private Set<CountryAttitude> countryAttitudes = new HashSet<CountryAttitude>();
@Id
@GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@ElementCollection
public Set<String> getNickNames() {
return nickNames;
}
public void setNickNames(Set<String> nickName) {
this.nickNames = nickName;
}
@ElementCollection //default column names
public Set<String> getHatedNames() {
return hatedNames;
}
public void setHatedNames(Set<String> hatedNames) {
this.hatedNames = hatedNames;
}
@ElementCollection //default column names
@Column
public Set<String> getPreferredNames() {
return preferredNames;
}
public void setPreferredNames(Set<String> preferredNames) {
this.preferredNames = preferredNames;
}
@ElementCollection
@MapKeyColumn(nullable=false)
public Map<String, Integer> getScorePerPreferredName() {
return scorePerPreferredName;
}
public void setScorePerPreferredName(Map<String, Integer> scorePerPreferredName) {
this.scorePerPreferredName = scorePerPreferredName;
}
@ElementCollection
@CollectionTable(name = "ScorePerNickName", joinColumns = @JoinColumn(name = "BoyId"))
@Column(name = "score", nullable = false)
@MapKeyColumn(nullable=false)
public Map<String, Integer> getScorePerNickName() {
return scorePerNickName;
}
public void setScorePerNickName(Map<String, Integer> scorePerNickName) {
this.scorePerNickName = scorePerNickName;
}
@ElementCollection
@CollectionTable(
name = "BoyFavoriteNumbers",
joinColumns = @JoinColumn(name = "BoyId")
)
@Column(name = "favoriteNumber", nullable = false)
@OrderColumn(name = "nbr_index")
public int[] getFavoriteNumbers() {
return favoriteNumbers;
}
public void setFavoriteNumbers(int[] favoriteNumbers) {
this.favoriteNumbers = favoriteNumbers;
}
@ElementCollection
@AttributeOverride(name = "element.serial", column = @Column(name = "serial_nbr"))
public Set<Toy> getFavoriteToys() {
return favoriteToys;
}
public void setFavoriteToys(Set<Toy> favoriteToys) {
this.favoriteToys = favoriteToys;
}
@ElementCollection
@Enumerated(EnumType.STRING)
@Column(name = "`characters`")
public Set<Character> getCharacters() {
return characters;
}
public void setCharacters(Set<Character> characters) {
this.characters = characters;
}
@ElementCollection
@Enumerated(EnumType.STRING)
@MapKeyColumn(nullable=false)
public Map<String, FavoriteFood> getFavoriteFood() {
return foods;
}
public void setFavoriteFood(Map<String, FavoriteFood>foods) {
this.foods = foods;
}
@ElementCollection(fetch = FetchType.EAGER)
//@Where(clause = "b_likes=false")
public Set<CountryAttitude> getCountryAttitudes() {
return countryAttitudes;
}
public void setCountryAttitudes(Set<CountryAttitude> countryAttitudes) {
this.countryAttitudes = countryAttitudes;
}
}