无法构建Hibernate SessionFactory,由以下原因引起:org.hibernate.AnnotationException:

时间:2014-07-03 08:25:55

标签: java mysql hibernate jpa playframework

我的mysql数据库和hibernate-tools生成的类都有这个问题,所有这些都运行良好,直到我在涉及4个表的数据库中进行了更改。

这是表格:

-

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=2;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';



-- -----------------------------------------------------
-- Table `profile`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `fairtime`.`profile` (
  `profile_id` INT(11) NOT NULL AUTO_INCREMENT,
  `created_at` DATETIME NOT NULL,
  `updated_at` DATETIME NULL DEFAULT NULL,
  `app_user_id` INT(11) NOT NULL,
  `address` VARCHAR(45) NOT NULL,
  `phone` VARCHAR(45) NOT NULL,
  `city_id` INT(11) NOT NULL,
  PRIMARY KEY (`profile_id`),
  INDEX `fk_profile_app_user1_idx` (`app_user_id` ASC),
  INDEX `fk_profile_city1_idx` (`city_id` ASC),
  CONSTRAINT `fk_profile_app_user1`
    FOREIGN KEY (`app_user_id`)
    REFERENCES `fairtime`.`app_user` (`app_user_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_profile_city1`
    FOREIGN KEY (`city_id`)
    REFERENCES `fairtime`.`city` (`city_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;



-- -----------------------------------------------------
-- Table `profile_option`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `fairtime`.`profile_option` (
  `profile_option_id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL,
  `hidden_for_user` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Specify if a target option is readable by Advertiser interface or not',
  `hidden_for_advertiser` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Specify if a target option is readable by Advertiser interface or not',
  `hidden_for_offer` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Specify if a target option is readable by Advertiser interface or not',
  `type` VARCHAR(45) NULL DEFAULT NULL,
  `is_unique_for_profile` TINYINT(1) NULL DEFAULT '0',
  `is_unique_for_target` TINYINT(1) NULL DEFAULT '0',
  PRIMARY KEY (`profile_option_id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;



-- -----------------------------------------------------
-- Table `profile_option_element`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `fairtime`.`profile_option_element` (
  `profile_option_element_id` INT(11) NOT NULL AUTO_INCREMENT,
  `profile_option_id` INT(11) NOT NULL,
  `name` VARCHAR(255) NOT NULL,
  `hidden_for_user` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Specify if a target option is readable by Advertiser interface or not',
  `hidden_for_advertiser` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Specify if a target option is readable by Advertiser interface or not',
  `hidden_for_offer` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Specify if a target option is readable by Advertiser interface or not',
  `type` VARCHAR(45) NULL DEFAULT NULL,
  `app_user_id` INT(11) NULL DEFAULT NULL COMMENT 'When a user creates a brand in their MyFairTime',
  `approved` TINYINT(1) NOT NULL DEFAULT '0',
  `created_at` DATETIME NULL DEFAULT NULL,
  `boolean_value` TINYINT(1) NULL DEFAULT NULL,
  PRIMARY KEY (`profile_option_element_id`, `profile_option_id`),
  INDEX `fk_target_option_element_target_option1_idx` (`profile_option_id` ASC),
  INDEX `fk_profile_option_element_app_user1_idx` (`app_user_id` ASC),
  CONSTRAINT `fk_target_option_element_target_option1`
    FOREIGN KEY (`profile_option_id`)
    REFERENCES `fairtime`.`profile_option` (`profile_option_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_profile_option_element_app_user1`
    FOREIGN KEY (`app_user_id`)
    REFERENCES `fairtime`.`app_user` (`app_user_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;


-- -----------------------------------------------------
-- Table `profile_has_profile_option_element`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `fairtime`.`profile_has_profile_option_element` (
  `profile_profile_id` INT(11) NOT NULL,
  `profile_option_element_profile_option_element_id` INT(11) NOT NULL,
  `profile_option_element_profile_option_id` INT(11) NOT NULL,
  PRIMARY KEY (`profile_profile_id`, `profile_option_element_profile_option_element_id`, `profile_option_element_profile_option_id`),
  INDEX `fk_profile_has_profile_option_element_profile_option_elemen_idx` (`profile_option_element_profile_option_element_id` ASC, `profile_option_element_profile_option_id` ASC),
  INDEX `fk_profile_has_profile_option_element_profile1_idx` (`profile_profile_id` ASC),
  CONSTRAINT `fk_profile_has_profile_option_element_profile1`
    FOREIGN KEY (`profile_profile_id`)
    REFERENCES `fairtime`.`profile` (`profile_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_profile_has_profile_option_element_profile_option_element1`
    FOREIGN KEY (`profile_option_element_profile_option_element_id` , `profile_option_element_profile_option_id`)
    REFERENCES `fairtime`.`profile_option_element` (`profile_option_element_id` , `profile_option_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

-

带有工作台的架构是这样的:

enter image description here

这是hibernate中涉及的类:

Profile.java:

-

package models.classes_hibernate;
// Generated 02/07/2014 10:54:27 by Hibernate Tools 3.6.0


import javax.persistence.*;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import static javax.persistence.GenerationType.IDENTITY;

/**
 * Profile generated by hbm2java
 */
@Entity
@Table(name="profile"
    ,catalog="fairtime"
)
public class Profile  implements java.io.Serializable {


     private Integer profileId;
     private AppUser appUser;
     private City city;
     private Date createdAt;
     private Date updatedAt;
     private String address;
     private String phone;
     private Set<ProfileHasCampaign> profileHasCampaigns = new HashSet<ProfileHasCampaign>(0);
     private Set<ProfileOptionElement> profileOptionElements = new HashSet<ProfileOptionElement>(0);
     private Set<Offer> offers = new HashSet<Offer>(0);

    public Profile() {
    }


    public Profile(AppUser appUser, City city, Date createdAt, String address, String phone) {
        this.appUser = appUser;
        this.city = city;
        this.createdAt = createdAt;
        this.address = address;
        this.phone = phone;
    }
    public Profile(AppUser appUser, City city, Date createdAt, Date updatedAt, String address, String phone, Set<ProfileHasCampaign> profileHasCampaigns, Set<ProfileOptionElement> profileOptionElements, Set<Offer> offers) {
       this.appUser = appUser;
       this.city = city;
       this.createdAt = createdAt;
       this.updatedAt = updatedAt;
       this.address = address;
       this.phone = phone;
       this.profileHasCampaigns = profileHasCampaigns;
       this.profileOptionElements = profileOptionElements;
       this.offers = offers;
    }

     @Id @GeneratedValue(strategy=IDENTITY)


    @Column(name="profile_id", unique=true, nullable=false)
    public Integer getProfileId() {
        return this.profileId;
    }

    public void setProfileId(Integer profileId) {
        this.profileId = profileId;
    }

@ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="app_user_id", nullable=false)
    public AppUser getAppUser() {
        return this.appUser;
    }

    public void setAppUser(AppUser appUser) {
        this.appUser = appUser;
    }

@ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="city_id", nullable=false)
    public City getCity() {
        return this.city;
    }

    public void setCity(City city) {
        this.city = city;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="created_at", nullable=false, length=19)
    public Date getCreatedAt() {
        return this.createdAt;
    }

    public void setCreatedAt(Date createdAt) {
        this.createdAt = createdAt;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="updated_at", length=19)
    public Date getUpdatedAt() {
        return this.updatedAt;
    }

    public void setUpdatedAt(Date updatedAt) {
        this.updatedAt = updatedAt;
    }


    @Column(name="address", nullable=false, length=45)
    public String getAddress() {
        return this.address;
    }

    public void setAddress(String address) {
        this.address = address;
    }


    @Column(name="phone", nullable=false, length=45)
    public String getPhone() {
        return this.phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

@OneToMany(fetch=FetchType.LAZY, mappedBy="profile")
    public Set<ProfileHasCampaign> getProfileHasCampaigns() {
        return this.profileHasCampaigns;
    }

    public void setProfileHasCampaigns(Set<ProfileHasCampaign> profileHasCampaigns) {
        this.profileHasCampaigns = profileHasCampaigns;
    }

@ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name="profile_has_profile_option_element", catalog="fairtime", joinColumns = { 
        @JoinColumn(name="profile_profile_id", nullable=false, updatable=false) }, inverseJoinColumns = { 
        @JoinColumn(name="profile_option_element_profile_option_element_id", nullable=false, updatable=false) })
    public Set<ProfileOptionElement> getProfileOptionElements() {
        return this.profileOptionElements;
    }

    public void setProfileOptionElements(Set<ProfileOptionElement> profileOptionElements) {
        this.profileOptionElements = profileOptionElements;
    }

@OneToMany(fetch=FetchType.LAZY, mappedBy="profile")
    public Set<Offer> getOffers() {
        return this.offers;
    }

    public void setOffers(Set<Offer> offers) {
        this.offers = offers;
    }




}

-

ProfileOptionElement.java:

-

package models.classes_hibernate;
// Generated 02/07/2014 10:54:27 by Hibernate Tools 3.6.0


import javax.persistence.*;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

/**
 * ProfileOptionElement generated by hbm2java
 */
@Entity
@Table(name="profile_option_element"
    ,catalog="fairtime"
)
public class ProfileOptionElement  implements java.io.Serializable {


     private ProfileOptionElementId id;
     private AppUser appUser;
     private ProfileOption profileOption;
     private String name;
     private boolean hiddenForUser;
     private boolean hiddenForAdvertiser;
     private boolean hiddenForOffer;
     private String type;
     private boolean approved;
     private Date createdAt;
     private Boolean booleanValue;
     private Set<Profile> profiles = new HashSet<Profile>(0);
     private Set<TargetHasProfileOptionElement> targetHasProfileOptionElements = new HashSet<TargetHasProfileOptionElement>(0);

    public ProfileOptionElement() {
    }


    public ProfileOptionElement(ProfileOptionElementId id, ProfileOption profileOption, String name, boolean hiddenForUser, boolean hiddenForAdvertiser, boolean hiddenForOffer, boolean approved) {
        this.id = id;
        this.profileOption = profileOption;
        this.name = name;
        this.hiddenForUser = hiddenForUser;
        this.hiddenForAdvertiser = hiddenForAdvertiser;
        this.hiddenForOffer = hiddenForOffer;
        this.approved = approved;
    }
    public ProfileOptionElement(ProfileOptionElementId id, AppUser appUser, ProfileOption profileOption, String name, boolean hiddenForUser, boolean hiddenForAdvertiser, boolean hiddenForOffer, String type, boolean approved, Date createdAt, Boolean booleanValue, Set<Profile> profiles, Set<TargetHasProfileOptionElement> targetHasProfileOptionElements) {
       this.id = id;
       this.appUser = appUser;
       this.profileOption = profileOption;
       this.name = name;
       this.hiddenForUser = hiddenForUser;
       this.hiddenForAdvertiser = hiddenForAdvertiser;
       this.hiddenForOffer = hiddenForOffer;
       this.type = type;
       this.approved = approved;
       this.createdAt = createdAt;
       this.booleanValue = booleanValue;
       this.profiles = profiles;
       this.targetHasProfileOptionElements = targetHasProfileOptionElements;
    }

     @EmbeddedId


    @AttributeOverrides( {
        @AttributeOverride(name="profileOptionElementId", column=@Column(name="profile_option_element_id", nullable=false) ), 
        @AttributeOverride(name="profileOptionId", column=@Column(name="profile_option_id", nullable=false) ) } )
    public ProfileOptionElementId getId() {
        return this.id;
    }

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

@ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="app_user_id")
    public AppUser getAppUser() {
        return this.appUser;
    }

    public void setAppUser(AppUser appUser) {
        this.appUser = appUser;
    }

@ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="profile_option_id", nullable=false, insertable=false, updatable=false)
    public ProfileOption getProfileOption() {
        return this.profileOption;
    }

    public void setProfileOption(ProfileOption profileOption) {
        this.profileOption = profileOption;
    }


    @Column(name="name", nullable=false)
    public String getName() {
        return this.name;
    }

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


    @Column(name="hidden_for_user", nullable=false)
    public boolean isHiddenForUser() {
        return this.hiddenForUser;
    }

    public void setHiddenForUser(boolean hiddenForUser) {
        this.hiddenForUser = hiddenForUser;
    }


    @Column(name="hidden_for_advertiser", nullable=false)
    public boolean isHiddenForAdvertiser() {
        return this.hiddenForAdvertiser;
    }

    public void setHiddenForAdvertiser(boolean hiddenForAdvertiser) {
        this.hiddenForAdvertiser = hiddenForAdvertiser;
    }


    @Column(name="hidden_for_offer", nullable=false)
    public boolean isHiddenForOffer() {
        return this.hiddenForOffer;
    }

    public void setHiddenForOffer(boolean hiddenForOffer) {
        this.hiddenForOffer = hiddenForOffer;
    }


    @Column(name="type", length=45)
    public String getType() {
        return this.type;
    }

    public void setType(String type) {
        this.type = type;
    }


    @Column(name="approved", nullable=false)
    public boolean isApproved() {
        return this.approved;
    }

    public void setApproved(boolean approved) {
        this.approved = approved;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="created_at", length=19)
    public Date getCreatedAt() {
        return this.createdAt;
    }

    public void setCreatedAt(Date createdAt) {
        this.createdAt = createdAt;
    }


    @Column(name="boolean_value")
    public Boolean getBooleanValue() {
        return this.booleanValue;
    }

    public void setBooleanValue(Boolean booleanValue) {
        this.booleanValue = booleanValue;
    }

@ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name="profile_has_profile_option_element", catalog="fairtime", joinColumns = { 
        @JoinColumn(name="profile_option_element_profile_option_element_id", nullable=false, updatable=false), 
        @JoinColumn(name="profile_option_element_profile_option_id", nullable=false, updatable=false) }, inverseJoinColumns = { 
        @JoinColumn(name="profile_profile_id", nullable=false, updatable=false) })
    public Set<Profile> getProfiles() {
        return this.profiles;
    }

    public void setProfiles(Set<Profile> profiles) {
        this.profiles = profiles;
    }

@OneToMany(fetch=FetchType.LAZY, mappedBy="profileOptionElement")
    public Set<TargetHasProfileOptionElement> getTargetHasProfileOptionElements() {
        return this.targetHasProfileOptionElements;
    }

    public void setTargetHasProfileOptionElements(Set<TargetHasProfileOptionElement> targetHasProfileOptionElements) {
        this.targetHasProfileOptionElements = targetHasProfileOptionElements;
    }




}

-

ProfileOption.java:

-

package models.classes_hibernate;
// Generated 02/07/2014 10:54:27 by Hibernate Tools 3.6.0


import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

import static javax.persistence.GenerationType.IDENTITY;

/**
 * ProfileOption generated by hbm2java
 */
@Entity
@Table(name="profile_option"
    ,catalog="fairtime"
)
public class ProfileOption  implements java.io.Serializable {


     private Integer profileOptionId;
     private String name;
     private boolean hiddenForUser;
     private boolean hiddenForAdvertiser;
     private boolean hiddenForOffer;
     private String type;
     private Boolean isUniqueForProfile;
     private Boolean isUniqueForTarget;
     private Set<Offer> offers = new HashSet<Offer>(0);
     private Set<ProfileOptionElement> profileOptionElements = new HashSet<ProfileOptionElement>(0);

    public ProfileOption() {
    }


    public ProfileOption(String name, boolean hiddenForUser, boolean hiddenForAdvertiser, boolean hiddenForOffer) {
        this.name = name;
        this.hiddenForUser = hiddenForUser;
        this.hiddenForAdvertiser = hiddenForAdvertiser;
        this.hiddenForOffer = hiddenForOffer;
    }
    public ProfileOption(String name, boolean hiddenForUser, boolean hiddenForAdvertiser, boolean hiddenForOffer, String type, Boolean isUniqueForProfile, Boolean isUniqueForTarget, Set<Offer> offers, Set<ProfileOptionElement> profileOptionElements) {
       this.name = name;
       this.hiddenForUser = hiddenForUser;
       this.hiddenForAdvertiser = hiddenForAdvertiser;
       this.hiddenForOffer = hiddenForOffer;
       this.type = type;
       this.isUniqueForProfile = isUniqueForProfile;
       this.isUniqueForTarget = isUniqueForTarget;
       this.offers = offers;
       this.profileOptionElements = profileOptionElements;
    }

     @Id @GeneratedValue(strategy=IDENTITY)


    @Column(name="profile_option_id", unique=true, nullable=false)
    public Integer getProfileOptionId() {
        return this.profileOptionId;
    }

    public void setProfileOptionId(Integer profileOptionId) {
        this.profileOptionId = profileOptionId;
    }


    @Column(name="name", nullable=false)
    public String getName() {
        return this.name;
    }

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


    @Column(name="hidden_for_user", nullable=false)
    public boolean isHiddenForUser() {
        return this.hiddenForUser;
    }

    public void setHiddenForUser(boolean hiddenForUser) {
        this.hiddenForUser = hiddenForUser;
    }


    @Column(name="hidden_for_advertiser", nullable=false)
    public boolean isHiddenForAdvertiser() {
        return this.hiddenForAdvertiser;
    }

    public void setHiddenForAdvertiser(boolean hiddenForAdvertiser) {
        this.hiddenForAdvertiser = hiddenForAdvertiser;
    }


    @Column(name="hidden_for_offer", nullable=false)
    public boolean isHiddenForOffer() {
        return this.hiddenForOffer;
    }

    public void setHiddenForOffer(boolean hiddenForOffer) {
        this.hiddenForOffer = hiddenForOffer;
    }


    @Column(name="type", length=45)
    public String getType() {
        return this.type;
    }

    public void setType(String type) {
        this.type = type;
    }


    @Column(name="is_unique_for_profile")
    public Boolean getIsUniqueForProfile() {
        return this.isUniqueForProfile;
    }

    public void setIsUniqueForProfile(Boolean isUniqueForProfile) {
        this.isUniqueForProfile = isUniqueForProfile;
    }


    @Column(name="is_unique_for_target")
    public Boolean getIsUniqueForTarget() {
        return this.isUniqueForTarget;
    }

    public void setIsUniqueForTarget(Boolean isUniqueForTarget) {
        this.isUniqueForTarget = isUniqueForTarget;
    }

@ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name="offer_has_profile_option", catalog="fairtime", joinColumns = { 
        @JoinColumn(name="profile_option_profile_option_id", nullable=false, updatable=false) }, inverseJoinColumns = { 
        @JoinColumn(name="offer_offer_id", nullable=false, updatable=false) })
    public Set<Offer> getOffers() {
        return this.offers;
    }

    public void setOffers(Set<Offer> offers) {
        this.offers = offers;
    }

@OneToMany(fetch=FetchType.LAZY, mappedBy="profileOption")
    public Set<ProfileOptionElement> getProfileOptionElements() {
        return this.profileOptionElements;
    }

    public void setProfileOptionElements(Set<ProfileOptionElement> profileOptionElements) {
        this.profileOptionElements = profileOptionElements;
    }




}

-

当我尝试使用hibernate时,我得到以下异常:

Unexpected exception[PersistenceException: [PersistenceUnit: fairtimePersistenceUnit] Unable to build Hibernate SessionFactory]

Caused by: org.hibernate.AnnotationException: A Foreign key refering models.classes_hibernate.ProfileOptionElement from models.classes_hibernate.Profile has the wrong number of column. should be 2

我找不到问题,提前感谢您的帮助

1 个答案:

答案 0 :(得分:2)

关系表profile_has_profile_option_element有多个引用配置文件选项元素的外键,这导致生成的类引用了该表的条目,而不是引用profile中的项目。我认为你想要的很多方式。要删除额外的外键字段,请将profile_optionprofile_option_element之间的关系更改为非标识,然后重新创建与profile的多对多关系

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

    CREATE SCHEMA IF NOT EXISTS `fairtime` ;
    USE `fairtime` ;

    -- -----------------------------------------------------
    -- Table `fairtime`.`profile`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `fairtime`.`profile` (
      `profile_id` INT(11) NOT NULL AUTO_INCREMENT,
      `created_at` DATETIME NOT NULL,
      `updated_at` DATETIME NULL DEFAULT NULL,
      `app_user_id` INT(11) NOT NULL,
      `address` VARCHAR(45) NOT NULL,
      `phone` VARCHAR(45) NOT NULL,
      `city_id` INT(11) NOT NULL,
      PRIMARY KEY (`profile_id`),
      INDEX `fk_profile_app_user1_idx` (`app_user_id` ASC),
      INDEX `fk_profile_city1_idx` (`city_id` ASC),
      CONSTRAINT `fk_profile_app_user1`
        FOREIGN KEY (`app_user_id`)
        REFERENCES `fairtime`.`app_user` (`app_user_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_profile_city1`
        FOREIGN KEY (`city_id`)
        REFERENCES `fairtime`.`city` (`city_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB
    DEFAULT CHARACTER SET = utf8;


    -- -----------------------------------------------------
    -- Table `fairtime`.`profile_option`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `fairtime`.`profile_option` (
      `profile_option_id` INT(11) NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(255) NOT NULL,
      `hidden_for_user` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Specify if a target option is readable by Advertiser interface or not',
      `hidden_for_advertiser` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Specify if a target option is readable by Advertiser interface or not',
      `hidden_for_offer` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Specify if a target option is readable by Advertiser interface or not',
      `type` VARCHAR(45) NULL DEFAULT NULL,
      `is_unique_for_profile` TINYINT(1) NULL DEFAULT '0',
      `is_unique_for_target` TINYINT(1) NULL DEFAULT '0',
      PRIMARY KEY (`profile_option_id`))
    ENGINE = InnoDB
    DEFAULT CHARACTER SET = utf8;


    -- -----------------------------------------------------
    -- Table `fairtime`.`profile_option_element`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `fairtime`.`profile_option_element` (
      `profile_option_element_id` INT(11) NOT NULL AUTO_INCREMENT,
      `profile_option_id` INT(11) NOT NULL,
      `name` VARCHAR(255) NOT NULL,
      `hidden_for_user` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Specify if a target option is readable by Advertiser interface or not',
      `hidden_for_advertiser` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Specify if a target option is readable by Advertiser interface or not',
      `hidden_for_offer` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Specify if a target option is readable by Advertiser interface or not',
      `type` VARCHAR(45) NULL,
      `app_user_id` INT(11) NULL DEFAULT NULL COMMENT 'When a user creates a brand in their MyFairTime',
      `approved` TINYINT(1) NOT NULL DEFAULT '0',
      `created_at` DATETIME NULL,
      `boolean_value` TINYINT(1) NULL DEFAULT NULL,
      PRIMARY KEY (`profile_option_element_id`),
      INDEX `fk_profile_option_element_app_user1_idx` (`app_user_id` ASC),
      INDEX `fk_profile_option_element_profile_option1_idx` (`profile_option_id` ASC),
      CONSTRAINT `fk_profile_option_element_app_user1`
        FOREIGN KEY (`app_user_id`)
        REFERENCES `fairtime`.`app_user` (`app_user_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_profile_option_element_profile_option1`
        FOREIGN KEY (`profile_option_id`)
        REFERENCES `fairtime`.`profile_option` (`profile_option_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `fairtime`.`profile_has_profile_option_element`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `fairtime`.`profile_has_profile_option_element` (
      `profile_profile_id` INT(11) NOT NULL,
      `profile_option_element_profile_option_element_id` INT(11) NOT NULL,
      PRIMARY KEY (`profile_profile_id`, `profile_option_element_profile_option_element_id`),
      INDEX `fk_profile_has_profile_option_element_profile_option_elemen_idx` (`profile_option_element_profile_option_element_id` ASC),
      INDEX `fk_profile_has_profile_option_element_profile1_idx` (`profile_profile_id` ASC),
      CONSTRAINT `fk_profile_has_profile_option_element_profile1`
        FOREIGN KEY (`profile_profile_id`)
        REFERENCES `fairtime`.`profile` (`profile_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_profile_has_profile_option_element_profile_option_element1`
        FOREIGN KEY (`profile_option_element_profile_option_element_id`)
        REFERENCES `fairtime`.`profile_option_element` (`profile_option_element_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB
    DEFAULT CHARACTER SET = utf8;


    SET SQL_MODE=@OLD_SQL_MODE;
    SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
    SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

不幸的是我没有足够的代表发布图片