【问题标题】:Is it possible set `null` value for non mapped columns using JPA/Hibernate?是否可以使用 JPA/Hibernate 为非映射列设置“null”值?
【发布时间】:2017-06-24 02:17:00
【问题描述】:

我有一个包含很多字段的现有表,其中一些没有默认值,如下所示。

在我的实体类中我只想声明一些字段

当我尝试插入新行时,我收到错误 Field 'hours_work' doesn't have a default value

+------------------------+---------------+------+-----+---------+----------------+
| Field                  | Type          | Null | Key | Default | Extra          |
+------------------------+---------------+------+-----+---------+----------------+  
|  ...                                                                  
| hours_work             | text          | NO   |     | NULL    |                |
| locations              | text          | NO   |     | NULL    |                |
| ...                                                                                            

然后,我将sql_mode 设置为''

mysql> set @@sql_mode='';
Query OK, 0 rows affected (0.00 sec)

所以我可以通过命令行插入行,但不能使用我的应用程序

mysql> insert into MyTable (column1) values ('test value');
Query OK, 1 row affected, 84 warnings (0.00 sec)

我尝试在 URL 连接中设置 sql_mode,就像我在一些帖子中看到的那样,但没有成功

application.yml

main:
  datasource:
    url: jdbc:mysql://localhost/my_database?sessionVariables=sql_mode=''

感谢任何建议!

【问题讨论】:

  • 改变你的表,让 hours_work 变为 Nullable
  • 我无法在当前数据库结构中触摸 =(
  • 所以你不能只为它设置一些文本
  • 该死的,谢谢你的帮助
  • 不客气

标签: java mysql hibernate jpa jpa-2.0


【解决方案1】:

根据下面的 Sébastien 解释,我能够修复它,将jdbcCompliantTruncation=false 添加到 MySQL URL 连接。

塞巴斯蒂安,

驱动程序需要启用 STRICT_TRANS_TABLES 模式才能强制执行 JDBC 截断检查的合规性。

如果您不能使用 STRICT_TRANS_TABLES 作为 sql_mode 的一部分,那么 您必须通过添加禁用截断检查 “jdbcCompliantTruncation=false”作为 URL 配置参数。

据 Sébastien 所说,https://bugs.mysql.com/bug.php?id=23371

所以现在 URL 连接看起来像

main:
  datasource:
    url: jdbc:mysql://localhost/edirectory_domain?jdbcCompliantTruncation=false&sessionVariables=sql_mode=''

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2012-01-15
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多