Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1.39中dao.insert()方法,没有忽略null字段 #66

Closed
happyday517 opened this issue Sep 29, 2011 · 17 comments
Closed

1.39中dao.insert()方法,没有忽略null字段 #66

happyday517 opened this issue Sep 29, 2011 · 17 comments
Assignees
Milestone

Comments

@happyday517
Copy link
Contributor

某些字段我希望由数据库来管理默认值,所以在插入时,这些字段的值为null
但dao.insert()仍然生成了插入这个字段的SQL语句,插入的值为null
导致执行报错

@wendal
Copy link
Member

wendal commented Sep 29, 2011

@wendal wendal closed this as completed Sep 29, 2011
@happyday517
Copy link
Contributor Author

这确实是一个bug,并非使用不当。1.b.37时是正常的
换了39出现了这个问题

@wendal wendal reopened this Oct 4, 2011
@wendal
Copy link
Member

wendal commented Oct 4, 2011

麻烦给出示例代码

@happyday517
Copy link
Contributor Author

class A {
private String a;
private String b;
}
A a = new A();
a.setA("something");
dao.insert(a)时,应该生成语句 insert into A (a) values ('something')
但现在生成的语句是:insert into A(a,b) values ('something',null)
b字段应该被忽略,而不是插入null

@happyday517
Copy link
Contributor Author

仔细想想,插入时忽略null是对的,因为忽略了,数据库如果没有默认值,本身就是null
如果不忽略显示地插入null,反而会和有默认值且非空的数据库约束矛盾

@cqyunqin
Copy link
Contributor

确实是这样的,我也觉得有问题是BUG

@cqyunqin
Copy link
Contributor

而且过滤字段不能解决问题,如果某条件下需要设置该值的话,那就没法实现了。

@zozoh
Copy link
Member

zozoh commented Oct 20, 2011

刚刚想到了,这个 bug 很难 fix 哦。 要加很多特殊判断
因为如果你选择插入了 5000 个对象,这些对象有些字段为空,有些不为空,那么无法做成一个统一的批量插入

这是现在 Dao 底层实现机制造成的限制,它应该再聪明点,如果仅仅插入一条,那么就做非空判断

当然,我们也要再观察一下这个 Issue 一段时间,我们可能会对 Dao 的底层实现机制做点调整,当然这个调整是一定不会改变使用的

@happyday517
Copy link
Contributor Author

兄弟们,修复一下这个bug吧,等了好久了 (┬_┬)

@wendal
Copy link
Member

wendal commented Feb 18, 2012

有点难搞

@zozoh
Copy link
Member

zozoh commented Feb 23, 2012

@happyday517 你数据库里面一定要有个值吗? 如果那样,设个

  @Column
  @Default("XXXX")
  private xxx xxx;

好了

@zozoh
Copy link
Member

zozoh commented Apr 1, 2012

看来这个问题还是不修为好

@zozoh zozoh closed this as completed Apr 1, 2012
@zozoh zozoh reopened this Jun 8, 2012
@zozoh
Copy link
Member

zozoh commented Jun 8, 2012

重新考虑一下

dao.insert 应该支持这个特性
dao.fastInsert 不应该支持这个特性

让我想想 ...

@zozoh zozoh modified the milestones: 1.b.51, 1.b.50 Apr 12, 2014
@zozoh zozoh modified the milestones: 1.b.51, 1.b.52 Oct 12, 2014
@cranehe
Copy link

cranehe commented Nov 5, 2014

看来这个问题由来已久,不知道现在51这个版本有没有解决这个问题了,灰太狼大哥

@wendal
Copy link
Member

wendal commented Dec 9, 2014

单独一个方法来解决这个问题? 声明这方法是缓慢的

@wendal
Copy link
Member

wendal commented Dec 9, 2014

按第一个对象来区分是否为null咯

@zozoh zozoh modified the milestones: 1.b.52, 1.b.53 Mar 16, 2015
@zozoh zozoh removed this from the 1.b.52 milestone Mar 16, 2015
@wendal
Copy link
Member

wendal commented Jul 2, 2015

已经做好了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants