/********************* TABLE DEFINITION ************************/ CREATE TABLE Plan ( entity_identifier CHAR(36) NOT NULL , entity_type_identifier CHAR(36) NOT NULL , plan_number INT(11) NOT NULL AUTO_INCREMENT , activity_description VARCHAR(250) DEFAULT NULL , activity_parent_activity_identifier CHAR(36) DEFAULT NULL , activity_sequence_in_parent_ordinal INT(11) NOT NULL DEFAULT '1' , plan_primary_contact_party_entity_identifier CHAR(36) DEFAULT NULL COMMENT 'This is a denormalization / consolidation of several type specific attributes:\nProject Types: Project Lead\nOpportunity Types: Primary Sales Rep\nWork Item Types: Requesting Party\n' , project_name VARCHAR(100) DEFAULT NULL , project_folder_uri VARCHAR(500) DEFAULT NULL , opportunity_customer_identifier CHAR(36) DEFAULT NULL , gcm_opportunity_id_number VARCHAR(50) DEFAULT NULL , project_objective_description VARCHAR(250) DEFAULT NULL , plan_assigned_priority_identifier CHAR(36) DEFAULT NULL , plan_current_state VARCHAR(100) NOT NULL , plan_current_reason VARCHAR(100) NOT NULL , plan_start_datetime DATETIME DEFAULT NULL , plan_end_datetime DATETIME DEFAULT NULL , plan_close_date DATETIME DEFAULT NULL , performance_start_datetime DATETIME DEFAULT NULL , performance_end_datetime DATETIME DEFAULT NULL , plan_wbs_number VARCHAR(50) DEFAULT NULL , plan_sort_wbs_number VARCHAR(50) DEFAULT NULL , work_item_additional_information TEXT , plan_creation_timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (entity_identifier) , ... ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; /********************* Activity Class ************************************/ @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) @MappedSuperclass public abstract class Activity implements Serializable , EntityLookup { // private static final long serialVersionUID = 1L; @Id @Basic(optional = false) @Column(name = "entity_identifier", nullable = false, length = 36) private String entityIdentifier; @JoinColumn(name = "entity_type_identifier", referencedColumnName = "entity_type_identifier", nullable = false) @ManyToOne(optional = false) private EntityType entityType; @Column(name = "activity_description", length = 250) private String activityDescription; @Basic(optional = false) @Column(name = "activity_sequence_in_parent_ordinal", nullable = false) private int activitySequenceInParentOrdinal; ... } /********************* Plan Class ************************************/ @Entity @Table( name = "plan" , uniqueConstraints = { @UniqueConstraint(columnNames = {"entity_identifier"}) , @UniqueConstraint(columnNames = {"plan_number"}) } ) @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="entity_type_identifier", discriminatorType=DiscriminatorType.STRING , length=36) @DiscriminatorValue("f2a53e3f-4235-11e1-8eec-00059a3c7a00") //UUID generated for Entity Type "Plan" @NamedQueries( { @NamedQuery(name = "Plan.findAll", query = "SELECT p FROM Plan p") , ... } ) public class Plan extends Activity implements Serializable , EntityLookup { private static final long serialVersionUID = 1L; @JoinColumn(name = "entity_type_identifier", referencedColumnName = "entity_type_identifier", nullable = false) @ManyToOne(optional = false) private EntityType entityType; @Basic(optional = false) @Column(name = "plan_number", nullable = false) private int planNumber; @Basic(optional = false) @Column(name = "plan_current_state", nullable = false, length = 100) private String planCurrentState; @Basic(optional = false) @Column(name = "plan_current_reason", nullable = false, length = 100) private String planCurrentReason; @Column(name = "plan_start_datetime") @Temporal(TemporalType.TIMESTAMP) private Date planStartDatetime; @Column(name = "plan_end_datetime") @Temporal(TemporalType.TIMESTAMP) private Date planEndDatetime; @Column(name = "plan_close_date") @Temporal(TemporalType.TIMESTAMP) private Date planCloseDate; @JoinColumn(name = "plan_assigned_priority_identifier", referencedColumnName = "entity_identifier") @ManyToOne private Priority planAssignedPriority; @Column(name = "plan_creation_timestamp", nullable = false) @Temporal(TemporalType.TIMESTAMP) private Date planCreationTimestamp; @Column(name = "plan_first_performance_start_datetime") @Temporal(TemporalType.TIMESTAMP) private Date planFirstPerformanceStartDatetime; @Column(name = "plan_final_performance_end_datetime") @Temporal(TemporalType.TIMESTAMP) private Date planFinalPerformanceEndDatetime; @JoinColumn(name = "activity_parent_activity_identifier", referencedColumnName = "entity_identifier") @ManyToOne private Plan activityParentActivity; @OneToMany(mappedBy="activityParentActivity") private List activityChildrenList; ... } /********************* Project Class ************************************/ @Entity @Table( name = "plan" , uniqueConstraints = { @UniqueConstraint(columnNames = {"entity_identifier"}) , @UniqueConstraint(columnNames = {"plan_number"}) } ) // @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="entity_type_identifier", discriminatorType=DiscriminatorType.STRING) @DiscriminatorValue("f2a53fdd-4235-11e1-8eec-00059a3c7a00") //UUID generated for Entity Type "Project" @NamedQueries( { @NamedQuery(name = "Project.findByProjectName", query = "SELECT p FROM Project p WHERE p.projectName = :projectName") , @NamedQuery(name = "Project.findByProjectFolderUri", query = "SELECT p FROM Project p WHERE p.projectFolderUri = :projectFolderUri") , @NamedQuery(name = "Project.findByProjectObjectiveDescription", query = "SELECT p FROM Project p WHERE p.projectObjectiveDescription = :projectObjectiveDescription") } ) public class Project extends Plan { @Column(name = "project_name", length = 100) private String projectName; @Column(name = "project_folder_uri", length = 500) private String projectFolderUri; @Column(name = "project_objective_description", length = 250) private String projectObjectiveDescription; @JoinColumn(name = "plan_primary_contact_party_entity_identifier", referencedColumnName = "entity_identifier") @ManyToOne private Party projectLeadParty; @OneToMany(cascade = CascadeType.ALL, mappedBy = "relationshipPrimaryObject") private List projectPersonList; ... } /********************* WorkItem Class ************************************/ @Entity @Table( name = "plan" , uniqueConstraints = { @UniqueConstraint(columnNames = {"entity_identifier"}) , @UniqueConstraint(columnNames = {"plan_number"}) } ) @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="entity_type_identifier", discriminatorType=DiscriminatorType.STRING) @DiscriminatorValue("f2aa6e0a-4235-11e1-8eec-00059a3c7a00") //UUID generated for Entity Type "WorkItem" public class WorkItem extends Plan { @Lob @Column(name = "work_item_additional_information", length = 65535) private String workItemAdditionalInformation; @JoinColumn(name = "plan_primary_contact_party_entity_identifier", referencedColumnName = "entity_identifier") @ManyToOne private Party workItemRequesterParty; ... } /********************* Summary Class ************************************/ @Entity @Table( name = "plan" , uniqueConstraints = { @UniqueConstraint(columnNames = {"entity_identifier"}) , @UniqueConstraint(columnNames = {"plan_number"}) } ) @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="entity_type_identifier", discriminatorType=DiscriminatorType.STRING) @DiscriminatorValue("01ce19bf-46ca-11e1-9fb5-00059a3c7a00") //UUID generated for Entity Type "Summary" public class Summary extends Plan { // THERE ARE NO MAPPED COLUMNS IN Summary ... }