package org.hibernate.test.annotations.any;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OrderColumn;
import javax.persistence.Table;
import org.hibernate.annotations.Any;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.ManyToAny;
@Entity
@Table( name = "property_list" )
public class PropertyList<T extends Property> {
private Integer id;
private String name;
private T someProperty;
private List<T> generalProperties = new ArrayList<T>();
public PropertyList() {
super();
}
public PropertyList(String name) {
this.name = name;
}
@ManyToAny( metaDef = "Property", metaColumn = @Column(name = "property_type") )
@Cascade( { org.hibernate.annotations.CascadeType.ALL })
@JoinTable(name = "list_properties",
joinColumns = @JoinColumn(name = "obj_id"),
inverseJoinColumns = @JoinColumn(name = "property_id")
)
@OrderColumn(name = "prop_index")
public List<T> getGeneralProperties() {
return generalProperties;
}
public void setGeneralProperties(List<T> generalProperties) {
this.generalProperties = generalProperties;
}
@Id
@GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Any( metaDef = "Property", metaColumn = @Column(name = "property_type") )
@Cascade( CascadeType.ALL )
@JoinColumn(name = "property_id")
public T getSomeProperty() {
return someProperty;
}
public void setSomeProperty(T someProperty) {
this.someProperty = someProperty;
}
public void addGeneratedProperty(T property) {
this.generalProperties.add( property );
}
}