我有一张表格可以模拟一个国家可以支持多种音高类型的关系。因此,美国支持音高类型1、2和3。MX支持音高类型2、3和4。

pitch_type表是一个简单的键值,其pitch_type_id引用字符串值。将类型与国家/地区代码连接起来的表在这里:

CREATE TABLE `country_pitch` (
  `country_pitch_id` INT NOT NULL AUTO_INCREMENT,
  `country_code` VARCHAR(2) NOT NULL,
  `pitch_type_id` INT NOT NULL,
  PRIMARY KEY (`country_pitch_id`),
  INDEX `fk_country_code_to_pitch_type_id_idx` (`pitch_type_id` ASC),
  CONSTRAINT `fk_country_code_to_pitch_type_id`
    FOREIGN KEY (`pitch_type_id`)
    REFERENCES `pitch_type` (`pitch_type_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);


产生:

---------------------------------------------------
| country_pitch_id | country_code | pitch_type_id |
---------------------------------------------------
| 1                | us           | 1             |
| 2                | us           | 2             |
| 3                | us           | 3             |
| 4                | mx           | 2             |
| 5                | mx           | 3             |
| 6                | mx           | 4             |
---------------------------------------------------


country_pitch_id未使用,重要的概念是将国家/地区代码与其关联的pitch_type匹配。

我相信这最好用ManyToMany关系来表示,因为一个国家可以具有多个音高类型,并且一个音高类型可以属于多个国家。我的目标是在类似于以下内容的POJO中对此进行建模:


/**
 * For a given market, US, CA, MX, etc, identify the available reach
 * generation curve types
 */
@Entity(name = "country_pitch")
@Data
public class CountryPitchTypes {
    public CountryPitchTypes() {}

    @Column(name = "country_code")
    private String countryCode;

    @ElementCollection
    @Convert(converter = PitchTypeConverter.class)
    private List<PitchType> pitchTypes;
}


但是此映射无法立即使用,因为我试图将联接表映射到该实体,因此出现Unknown column错误。您能否指导我将pojo映射到具有相关列表的单个pojo,是对pojo的适当补充?

我觉得@JoinTable批注对于某种分组是必需的,但不确定如何配置它。最终,我试图将country_pitch表映射到CountryPitchTypes类,并按国家/地区代码将所有音高类型分组。

国家/地区代码不属于我们的数据库,顺便说一句。也就是说,没有countries表,country_id num指向2个字母的country_code。

最佳答案

在这种情况下,注释ManyToMany不正确。这意味着许多CountryPitchTypes映射到许多PitchType。您需要的是OneToMany。

关于java - 使用MYSQL表结构创建JPA映射时遇到问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56941980/

10-12 00:42
查看更多