spring hibernate 多对一的关系,为什么传输外键属性.id,比如logo.id

spring hibernate 多对一的关系,前端向后台传输数据时,为什么要传外键的属性.id,比如logo.id,如果不以类似这样的传logo.id,而是这样传 logo,spring就会报错图片描述

使用过谷歌查询,但没有我想要的答案,是不是和spring的设计有关

相关代码

  • javabean部分代码如下:
public class ProductCategory extends BaseObj {

    /**
     * 品类图片
     */
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "logo_id")
    private Picture logo;
    
}
  • 前端向后台传输的正确代码,因为 name = logo.id:
<tr>
  <td>图片:</td>
  <td>
     <div class="clearfix">
       <input v-model="modalData.logo['id']" name="logo.id"/>
    </td>
</tr>
  • 前端向后台传输的错误代码,因为 name = logo:
<tr>
  <td>图片:</td>
  <td>
     <div class="clearfix">
       <input v-model="modalData.logo['id']" name="logo"/>
    </td>
</tr>

我希望能从根本上说明,为什么一定要带属性的id,否则就会报错呢?跪谢众位大神

阅读 2k
1 个回答

错误描述

这是springframework报出的类型转换错误,因为我们在传logo.id时,logo.id是一个字符串的格式,而logo则认为是一个对象(一个图片的对象)。spring在数据转化为没有图片的这个类型, 于是数据格式转化出错,便报出了这样的错误。

  • 为什么一定要传logo.id呢?

因为,spring在通过反射创建对象时,首先是根据查找该对象属性是不是java自带的类型,比如八大基本类型(其包装类型)、字符串类型、日期类型。

如果是java的自带的数据了类型,可以根据对象的属性填充值。

如果不是java自带的数据类型,默认是根据属性创建对象,如果没有上传其属性对象的属性,其就会报出数据类型错误:org.springframework.validation.BeanPropertyBindingResult: 1 errors;如果我们上传了其属性对象的属性,比如上面的问题:logo.id,其会根据属性对象的属性来创建这个picture对象的,如图所示:

clipboard.png

这和spring的自动装配息息相关的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题