@OneToMany @JoinTable использование с тремя таблицами - PullRequest
0 голосов
/ 03 июня 2018

Я застрял с одним сценарием в спящем режиме, я пытался искать такое обсуждение сценария, но я не мог так разгуляться здесь за любыми предложениями или помощью,

У меня есть три таблицы category, category_artical, artical.

CREATE TABLE `category` (
  `category_id` int(11) NOT NULL AUTO_INCREMENT,
  `category_name` varchar(45) NOT NULL,
  `category_description` varchar(45) NOT NULL,
  PRIMARY KEY (`category_id`)
);


CREATE TABLE `article` (
  `article_id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(70) NOT NULL,
  `description` varchar(250) NOT NULL,
  `keywords` varchar(150) NOT NULL,
  `content` text NOT NULL,
  PRIMARY KEY (`article_id`)
);

CREATE TABLE `category_article` (
  `category_id` int(11) NOT NULL,
  `article_id` int(11) NOT NULL,
  'category_article_status' varchar(1) NOT NULL.
  'category_article_type' varchar(2) NOT NULL,
  PRIMARY KEY (`category_id`,`article_id`),
  UNIQUE KEY `article_id_UNIQUE` (`article_id`),
  KEY `fk_category` (`category_id`),
  KEY `fk_article` (`article_id`),
  CONSTRAINT `fk_article` FOREIGN KEY (`article_id`) REFERENCES `article` (`article_id`),
  CONSTRAINT `fk_category` FOREIGN KEY (`category_id`) REFERENCES `category` (`category_id`)
);

у меня есть сущность для категории,

    @Entity
    @Table(name = "CATEGORY")
    public class Category {

        private long id;
        private String name;

    @Id
    @GeneratedValue
    @Column(name = "CATEGORY_ID")
    public long getId() {
        return id;
    }

    @OneToMany(cascade = CascadeType.ALL)
    @JoinTable(
            name = "CATEGORY_ARTICLE",`enter code here`
            joinColumns = @JoinColumn(name = "CATEGORY_ID"),
            inverseJoinColumns = @JoinColumn(name = "ARTICLE_ID")
    )
    private Set<Article> articles; 
    // other getters and setters...

/*For Article entity is */
    @Entity
    @Table(name = "ARTICLE")
    public class Article {
        private long id;
        private String title;
        private String description;
        private String keywords;
        private String content;

    @Id
    @GeneratedValue
    @Column(name = "ARTICLE_ID")
    public long getId() {
        return id;
    }

    // other getters and setters...

Для category_article у меня нет сущности, так как я использую @jointable в категории, так что все работает нормально, пока у меня есть только два столбца в category_article, которыеявляются category_id и article_id.Но как только я добавил еще два столбца, я запутался, как вставить данные в эти столбцы (category_article_status и category_article_type), которые не равны нулю.

любые предложения по этому поводу.

1 Ответ

0 голосов
/ 03 июня 2018

Вы должны создать еще одну сущность для CATEGORY_ARTICLE, как это.

@Entity
@Table(name = "CATEGORY_ARTICLE")
public class CategoryArticle{

   @Id
   private Long id;

   @ManyToOne(cascade = CascadeType.ALL)
   @JoinColumn(name = "category_id")  
   private Category category;

   @ManyToOne(cascade = CascadeType.ALL)
   @JoinColumn(name = "article_id")  
   private Article article; 


   // other columns 
   private Boolean categoryArticleStatus;

   private Long categoryArticleType;

}

, а также должен изменить Category и Article.Удалите JoinTable из категории объекта и измените его следующим образом.

Категория

@Entity
@Table(name = "CATEGORY")
public class Category {

  //.....

  @OneToMany(mappedBy = "category")
  private Set<CategoryArticle> categoryArticleSet;
}

Артикул

@Entity
@Table(name = "ARTICLE")
public class Article {

  //.....

  @OneToMany(mappedBy = "article")
  private Set<CategoryArticle> categoryArticleSet;

 }
...