package org.frbr.datamodel;

import java.sql.*;
import java.util.*;
import java.lang.reflect.Constructor;
import org.apache.commons.logging.*;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.persistence.JoinTable;
import javax.sql.DataSource;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Inheritance;

/**
 * Title:       Book
 * Copyright:   
 * @author:     Ian Ibbotson
 * Company:     Knowledge Integration Ltd
 * Description:
 */
@Entity
@Inheritance(strategy=javax.persistence.InheritanceType.SINGLE_TABLE)
@Table(name="FRBR_GROUP2_OBJECT")
@DiscriminatorColumn(name = "OBJ_TYPE", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue("PARENT")
@org.hibernate.annotations.ForceDiscriminator
public class Group2Object {

  /** The <code>Log</code> instance for this application.  */
  protected static Log log = LogFactory.getLog(Group2Object.class);

  private Long id;
  private String name;
  private java.util.Set<Work> works = new java.util.HashSet();

  public Group2Object() {
  }

  public Group2Object(String name) {
    this.name = name;
  }

  @Id
  @Column(name="ID")
  @GeneratedValue(strategy=GenerationType.AUTO)
  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  @Column(name="NAME",length=255)
  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  @ManyToMany
  @JoinTable(name="FRBR_CREATOR", joinColumns = { @JoinColumn( name="CREATOR_ID_FK") }, inverseJoinColumns = { @JoinColumn( name="WORK_ID_FK") } )
  public java.util.Set<Work> getWorks() {
    return works;
  }

  public void setWorks(java.util.Set<Work> works) {
    this.works = works;
  }

}
