google-code-export / nutz

Automatically exported from code.google.com/p/nutz
Apache License 2.0
1 stars 1 forks source link

one2one双向映射 插入外键错误 #441

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
问题产生的条件:
one2one双向映射 使用insertWith(obj, null)插入其中任意一方。

发生问题的调用代码:
    Pet tom = new Pet("tom");
    Master i = new Master("myname");
    i.setPet(tom);
    tom.setMaster(i);
    dao.insertWith(i, null);

问题的详细说明:
从理论上讲2条insert sql肯定有先后
后插入对象的主键在先插入对象的时候还是未知的
除非在2次插入后nutz能够自动执行update
hibernate就是怎么做的

在插入master的时候master中级联的pet由于还没有插入那么pet_id��
�能当0插入
其后插入pet的时候pet_id获取其自增值
此时如果不对master进行update
那么对应关系肯定就错了

异常堆栈:

相关日志:
log4j: 2011-04-12 17:01:55,216 [main] DEBUG 
org.nutz.dao.impl.DefaultDaoExecutor - INSERT INTO t_pet(id,master_id,name) 
VALUES( 0, 0, 'tom')
log4j: 2011-04-12 17:01:55,216 [main] DEBUG org.nutz.dao.sql.SqlImpl - Prepare: 
INSERT INTO t_pet(id,master_id,name) VALUES( ?, ?, ?)
log4j: 2011-04-12 17:01:55,235 [main] DEBUG 
org.nutz.dao.impl.DefaultDaoExecutor - select @@IDENTITY
log4j: 2011-04-12 17:01:55,235 [main] DEBUG org.nutz.dao.sql.SqlImpl - Prepare: 
select @@IDENTITY
log4j: 2011-04-12 17:01:55,243 [main] DEBUG org.nutz.resource.Scans - Scan 
Resource by org.nutz.resource.impl.LocalResourceScan@104c575
log4j: 2011-04-12 17:01:55,331 [main] DEBUG org.nutz.castor.Castors - Using 18 
castor for Castors
log4j: 2011-04-12 17:01:55,337 [main] DEBUG 
org.nutz.dao.impl.DefaultDaoExecutor - INSERT INTO t_master(id,pet_id,name) 
VALUES( 0, 2, 'myname')
log4j: 2011-04-12 17:01:55,337 [main] DEBUG org.nutz.dao.sql.SqlImpl - Prepare: 
INSERT INTO t_master(id,pet_id,name) VALUES( ?, ?, ?)
log4j: 2011-04-12 17:01:55,338 [main] DEBUG 
org.nutz.dao.impl.DefaultDaoExecutor - select @@IDENTITY
log4j: 2011-04-12 17:01:55,338 [main] DEBUG org.nutz.dao.sql.SqlImpl - Prepare: 
select @@IDENTITY

Original issue reported on code.google.com by zhuyin...@gmail.com on 12 Apr 2011 at 9:21

GoogleCodeExporter commented 9 years ago
恩 Nutz 的级联操作的确是很弱的
我在想,是不是不要级联,现在的级联在 60% 
的时候还有点用,很多情况都是不给力的。

不过这个问题,等 Dao 重构完或许有办法解决 ...

Original comment by zozoh...@gmail.com on 12 Apr 2011 at 6:24