@Column写在属性和写在get方法上面的区别

文章讨论了在JavaJPA中遇到的SQLSyntaxErrorException,原因是字段creatorName未在数据库字段列表中找到。作者总结了@Column注解放在属性与get方法上的区别,并指出当字段命名不符合JPA驼峰式规范时,@Column必须与@Id在相同位置才生效。此外,文章强调了标准驼峰式命名的重要性,以及@Column注解用于字段名与数据库列名不一致的情况。
摘要由CSDN通过智能技术生成

📢📢📢📣📣📣
哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝
一位上进心十足的【Java ToB端大厂领域博主】!😜😜😜
喜欢java和python,平时比较懒,能用程序解决的坚决不手动解决😜😜😜

✨ 如果有对【java】感兴趣的【小可爱】,欢迎关注我

❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
————————————————

如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。

目录

 问题描述

总结

分析


 

 问题描述

Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'creatorName' in 'field list'
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
        at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
        at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916)
        at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1061)
     

今天是有jpa遇到了一个坑,之前没有注意,今天进行了整理,总结一下JPA中的@Column写在属性和写在get方法上面的区别是什么。

总结

即在相应的数据库表里找不到creatorName字段。我觉得很奇怪。请教了大佬,然后查了一些别人的文章,现在做一下总结。

1、首先,我的字段名虽然起的符合一般规范,但应该是不符合JPA的命名规范的,不然也不会在映射时将“creatorName”映射成“creator_name”。

2、当时,我的@Id字段时写在id的属性上,而我的@Column(name = "creator_name")写在了get方法上,如下图:

   而id属性写在属性上面

 最后在进行保存的时候提示字段不存在。creatorName

分析

请教过大佬以后,才知道:虽然@Column可以写在属性上,也可以写在get方法上,但是它必须和@Id在同样的位置才会起效。即@Id在字段属性上,@Column也必须写在字段属性上,写在get方法上是不生效的。

有人可能会问,为什么我有的写在字段属性上,有的写在get方法上也不会报错,都会生效呢?

这大概是因为你的字段命名都是标准的驼峰式,所以jpa会按照既定的规则对你标准驼峰式的字段名进行拆解,虽然和@Id不在同样位置的@Column没有生效,但是因为你的字段名是标准驼峰式,那么JPA拆解后就能顺利找到你在数据库的字段了。但是我这个 名字估计是因为不符合JPA要求的命名规则,而且@Column和@Id不在同一位置上,所以导致@Column没有生效,然后JPA按照它自己的一套规则对我的creator_name进行转换,转成了“creatorName”,自然就在数据库找不到对应的字段了。

这里有一个点就是,如果你的命名是标准的符合JPA命名规范的驼峰式,那么你不写@Column也可以。我想@Column最大的作用就是,当你的实体类里某个属性的名字和数据库对应的字段名不一致时,可以用来告诉JPA这个属性在数据库表中的真实名字。例如: 

当你在实体类里叫code的属性,对应的是数据库表中的num字段时,生效的@Column会告诉JPA这个code属性在数据库中的真实名字。

具体深入的掌握还需要对jpa的源码进行解读才能知道这个解析过程是如何进行的,这里进行简单的分析,后续专门再学习一下jpa的源码。

如果觉得本文对你有帮助,欢迎点赞,欢迎关注,如果有补充欢迎评论交流,我将努力创作更多更好的文章。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智达教育‍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值