繁体   English   中英

从具有Spring和JPA批注的两个表之间具有外键关系的html表单(使用Thymeleaf)保存数据的问题

[英]Problem with saving data from a html form (using Thymeleaf) that has a foreign key relation between two table with Spring and JPA annotations

我是Spring开发的新手,我试图了解关系注释的工作方式。 我有两个实体,用户和国家。 用户与国家/地区有@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)]

这是因为它需要一个“国家/地区”类型,但我确实需要添加一行名称和与西班牙相关联的ID。 我不需要创建整个Country对象。 我不知道该怎么办以及我做得是否正确。 有人可以帮我吗? 提前致谢。

您需要保存Country类对象,而不仅仅是country's name ,正如我所看到的,Country类与您的User类映射。
为此,从您从HTML接收的国家/地区的名称/ ID中获取“国家/地区”对象,然后将其与用户详细信息一起保存。

像这样的东西:

User user =  getUserById(user_id); //get user's details or create a new User's Object

Country country = getCountryById(country_id); //get Country's object using id or name you're receiving from your HTML-form

user.setCountry(country); //set Country's object in your User's object 

//save user's object 

也许您可以尝试使用自定义属性编辑器或转换器? 它将字符串转换为您的Country对象。

Spring自定义属性编辑器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM