问题描述
我有A表和B表两个表,B表引用了A表主键作为外键,两个表的主键都不是序列,我在hibernate配置主键id时都设置成<generatorclass="assigned"/>我在执行向B表添加一条记录的时候报了如下错误:ERRORcom.aptech.dao.TDeviceDAO-savefailedorg.hibernate.id.IdentifierGenerationException:idsforthisclassmustbemanuallyassignedbeforecallingsave():com.aptech.pojos.TDevice请问该如何解决??
解决方案
解决方案二:
idsforthisclassmustbemanuallyassigned在保存前要手动指定主键id
解决方案三:
不同的数据库有不同的主键生成方式没有序列你也得选择一个正常的首先LZ你用的什么数据库?
解决方案四:
hibernate配置主键id时都设置成<generatorclass="assigned"/>需要保存对象的时候自己指定主键。
解决方案五:
楼主是什么数据库?
解决方案六:
楼主参考一下
解决方案七:
不同的数据库有不同的主键配置
解决方案八:
引用3楼warison2008的回复:
hibernate配置主键id时都设置成<generatorclass="assigned"/>需要保存对象的时候自己指定主键。
根据你的数据库看一下自己的配置吧……
解决方案九:
是不是因为B中插入数据时引用了A中外键的那个字段在没A中不存在啊
解决方案十:
主键的assigned生成方式由程序自动生成表的主键,即在你的测试程序中要调用setId()方法,且必须在调用save()前调用(或者说在调用save()前必须指定id,其实就是说,主键值不能为空!)。把主键的生成方式改为native,它的特征是能够根据底层数据库自动选择主键生成方式。
解决方案十一:
你可以自定义主键的生成策略类然后在映射文件中配置一下你每次添加的时候,就会根据你自定义的策略给ID赋值
解决方案十二:
你将<generatorclass="assigned"/>中的assigned换成native顶9楼
解决方案十三:
B表引用了A表主键作为外键B表的主键就不能设成<generatorclass="assigned"/>插入时自己指定主键
解决方案十四:
hibernate配置主键id时都设置成<generatorclass="assigned"/>需要保存对象的时候自己指定主键
解决方案十五:
我用的是Oracle数据库,设置成native同样不可以,为了更好的说明,我把两个表的配置粘贴如下:A表:<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!--MappingfileautogeneratedbyMyEclipsePersistenceTools--><hibernate-mapping><classname="com.aptech.pojos.Zonghe1"table="ZONGHE1"schema="SCOTT"><idname="FGoodsId"type="java.lang.String"><columnname="F_GOODS_ID"length="20"/><generatorclass="assigned"/></id><propertyname="FGoodsName"type="java.lang.String"><columnname="F_GOODS_NAME"length="50"/></property><propertyname="FPrice"type="java.lang.Double"><columnname="F_PRICE"scale="4"/></property><propertyname="FCount"type="java.lang.Long"><columnname="F_COUNT"precision="22"scale="0"/></property><propertyname="FRemark"type="java.lang.String"><columnname="F_REMARK"length="100"/></property><setname="TDevices"inverse="true"><key><columnname="F_GOODS_ID"length="20"/></key><one-to-manyclass="com.aptech.pojos.TDevice"/></set></class></hibernate-mapping>B表:<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!--MappingfileautogeneratedbyMyEclipsePersistenceTools--><hibernate-mapping><classname="com.aptech.pojos.TDevice"table="T_DEVICE"schema="SCOTT"><idname="TId"type="java.lang.String"><columnname="T_ID"length="20"/><generatorclass="assigned"/></id><many-to-onename="zonghe1"class="com.aptech.pojos.Zonghe1"fetch="select"><columnname="F_GOODS_ID"length="20"/></many-to-one><propertyname="TName"type="java.lang.String"><columnname="T_NAME"length="20"/></property><propertyname="TPrice"type="java.lang.Double"><columnname="T_PRICE"precision="18"scale="1"/></property><propertyname="TFrom"type="java.lang.String"><columnname="T_FROM"length="100"/></property></class></hibernate-mapping>
解决方案:
学习。。。
解决方案:
帮助顶顶