就是说,我想更新一个表,但是这个表没有主键,里面有两条记录UserPurchase(B) UserID,PurchaseID,Status,ReceiptNo 001 1001 ok 000000001 002 1002 pending null正确的执行脚本应该是 update UserPurchase set status= 'failed' where UserID = '001' and PurchaseID= '1001' 但是,因为没有主键,而在entity里,hibernate又一定要我定义主键,否则没法发布,所以我只好指定UserID是主键(其实根本没主键),问题出现了,在我调用getHibernateTemplate().save(UserPurchase)的时候,SQL是 update UserPurchase set status= 'failed' where UserID = '001' 而不是我想要的 update UserPurchase set status= 'failed' where UserID = '001' and PurchaseID= '1001'所以报错啦。 Batch update returned unexpected row count from update [0]; actual row count: 2; expected: 1
因为hibernate的hql在where后面条件只有一个,这样update的话会有两个记录,所以报错,我不知道怎么能把另外一个条件也加进去。 update UserPurchase set status= 'failed' where UserID = '001' 变成我我想要的 update UserPurchase set status= 'failed' where UserID = '001' and PurchaseID= '1001'
where后面的条件为什么只有一个?
我也不知道啊,我猜是 我只指定了一个主键(其实也不是,但是必须要指定),hibernate就默认用update UserPurchase set status= 'failed' where UserID = '001'
UserID,PurchaseID,Status,ReceiptNo
001 1001 ok 000000001
002 1002 pending null正确的执行脚本应该是
update UserPurchase set status= 'failed' where UserID = '001' and PurchaseID= '1001'
但是,因为没有主键,而在entity里,hibernate又一定要我定义主键,否则没法发布,所以我只好指定UserID是主键(其实根本没主键),问题出现了,在我调用getHibernateTemplate().save(UserPurchase)的时候,SQL是
update UserPurchase set status= 'failed' where UserID = '001'
而不是我想要的
update UserPurchase set status= 'failed' where UserID = '001' and PurchaseID= '1001'所以报错啦。
Batch update returned unexpected row count from update [0]; actual row count: 2; expected: 1
update UserPurchase set status= 'failed' where UserID = '001'
变成我我想要的
update UserPurchase set status= 'failed' where UserID = '001' and PurchaseID= '1001'
用@Embeddable