我有一张表格可以模拟一个国家可以支持多种音高类型的关系。因此,美国支持音高类型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/