TEntity t = dao.load(TEntity.class,id);
t.getDetails().clear();
EntityDetail d = new EntityDetail();// 显然此时d的id=0;
t.addDetail(d);
EntityManager.merge(t);//执行此行代码后d的id>0;但问题是此时生成的id号有时会与d对应的数据库表T_Enity_D已存在的id号相同,导致事务提交时报'违反唯一约束条件';
想不明白为什么会生成一样id号?
请各位赐教..
解决方案 »
- 关于Webservice+struts+sping 的scope问题
- struts1报jasper错误,TLD文件读取有问题
- 关于jdbc的问题
- No bean found under attribute key page
- entity里面可以有静态变量吗
- iis+tomcat整合之后可以用一切正常。隔天后整个IIS的网站全部为404(配置全部正常的),求高手。
- java jxl读取Excel 中的数据,并插入数据库
- struts标签<html:options>设定默认的选项
- 在IDEA里面怎么开发struts啊!还有插件怎么安装啊!
- 使用Spring Session Redis 共享Session 后如何监听Session的sessionDestroyed事件
- 怎么取到post的那一串参数
- 利用jacob将Word转成PDF时候报错:Invoke of: SaveAs
后面加上session.flush
因为虽然你将t的details清空了,但是并没有更新到数据库,flush之后就不会出现主键冲突。
这两点具体怎么做啊?
我的JPA用EclipseLink实现,在persistence.xml 哪个属性可以设为打印SQL?
日志调成DEBUG 又怎么设置? 大哥请教...谢谢..
[EL Fine]: 2012-03-05 18:43:34.358--ClientSession(7557391)--Connection(13545476)--Thread(Thread[http-9080-3,5,main])--INSERT INTO T_Enity (ID, STATE, VERSION, MODIFYID) VALUES (?, ?, ?, ?)
bind => [25145, EFFECT, 2, 325]
[EL Fine]: 2012-03-05 18:43:34.377--ClientSession(7557391)--Connection(13545476)--Thread(Thread[http-9080-3,5,main])--INSERT INTO T_Enity_D (ID, STATE, VERSION, MANAGERID, ENTITYID) VALUES (?, ?, ?, ?, ?)
bind => [69887, EFFECT, 1, 38411, 25145]
[EL Warning]: 2012-03-05 18:43:34.384--UnitOfWork(7982270)--Thread(Thread[http-9080-3,5,main])--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.1.0.v20100614-r7608): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件 (PETER.SYS_C0046817)T_Enity_D表中 已存在69887的ID号..
为什么生成相同的ID?为什么?
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
public long getId() {
return id;
} public void setId(long id) {
this.id = id;
}这是所有类的ID生成策略.使用oracle11g
原因是自己用户数据是从其它用户的数据导入进来的.
自己用户sequence序列值比较小.其它用户的数据量已大大超过自己的sequence的currval
所以在增加记录时难免主键冲突.
删除自己用户的sequence,用回其它用户的sequence就可以了.