我是 Spring 开发的新手,我正在尝试了解关系注释是如何工作的。我有两个实体,用户和国家。用户与 Country 有 @ManyToOne 关系。
用户实体
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private int id;
@Column(name = "name")
private String name;
@ManyToOne
@JoinColumn(name = "country", foreignKey = @ForeignKey(name = "FK_country"), referencedColumnName = "name")
private Country country;
//Other columns, Constructor, Getter, Setter omitted
}
国家实体
@Entity
public class Country {
@Id
@Column(nullable=false)
private String name;
@Column(nullable=false)
private String continent;
//Other columns, Constructor, Getter, Setter omitted
}
它在数据库中创建了我想要的所有内容,但我的问题是当我试图从表单中保存数据时。我的表单将输入名称和所有可能国家/地区之间的选择(之前加载了查询)。提供名称并选择国家后,应在我的 MySQL 数据库中写入带有名称和国家 ID 的行。我收到以下错误:
java.lang.IllegalArgumentException: Parameter value [Spain] did not match expected type [com.model.Country(n/a)]
这是因为它需要 Country 类型,但我确实需要添加一行,其中包含与西班牙关联的名称和 id。我不需要创建整个 Country 对象。我不知道该怎么做,如果我做得正确。有人可以帮帮我吗?提前致谢。