是否可以使用 JPA/Hibernate 为非映射列设置“null”值?

Is it possible set `null` value for non mapped columns using JPA/Hibernate?

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

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

当我尝试插入新行时,出现错误 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=''

感谢任何建议!

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

Sébastien,

The driver needs the STRICT_TRANS_TABLES mode enabled to enforce JDBC compliance on truncation checks.

If you can't use STRICT_TRANS_TABLES as part of your sql_mode, then you'll have to disable truncation checks by adding "jdbcCompliantTruncation=false" as a URL configuration parameter.

根据 Sébastien 的说法,在 https://bugs.mysql.com/bug.php?id=23371

所以现在 URL 连接看起来像

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