`

Exception in thread "main" org.hibernate.id.IdentifierGenerationException: attem

 
阅读更多

今天在做Hibernate中1多1双向关联映射的实例时,

保存时,报下面的错误..

 

检查了一下..具体Hibernate配置代码是没有问题:

Person_SX_PK_One_to_One.hbm.xml:

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
	<class name="pack.java.model.Person_SX_PK_One_to_One" table="ZHT_PERSON_SX_PK_ONE_TO_ONE">
		<id name="id" column="ID">
			<generator class="identity"></generator>
		</id>
		
		<property name="name" column="NAME"></property>
		<property name="age" column="AGE"></property>
		
		<!-- 1对1,引用address对象, -->
		<one-to-one 
			name="addressSXPKOneToOne" 
			class="pack.java.model.Address_SX_PK_One_To_One" 
			fetch="select" 
			lazy="false"
			cascade="all">
		</one-to-one>
	</class>
</hibernate-mapping>

 

    Address_SX_PK_One_To_One.hbm.xml:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
	<class name="pack.java.model.Address_SX_PK_One_To_One" table="ZHT_ADDRESS_SX_PK_ONE_TO_ONE">
		<id column="ID" name="id">
			<!-- generator 主键生成策略,配制成foreign,外键,是引用主表person的对象。 -->
			<generator class="foreign">
				<param name="property">personSXPKOneToOne</param>
			</generator>
		</id>
		
		<property name="addressDetail" column="ADDRESSDETAIL"></property>
		
		<!-- 表示在address表中,存在外键约束,外键参考相关表person对象。 -->
		<one-to-one name="personSXPKOneToOne" constrained="true"></one-to-one>
	</class>
</hibernate-mapping>

 

 

然后写了一个test类,测试时,

给person设置属性值并且给peson设置address对象,然后保存person. 现在就发生错误了.

 

原因是因为没有给address对象设置person对象. 所以报如下错误,。原因在于address引用了person表的主键,如果不设置.则会引用一个null值..不能进save操作,所以,需要注意。

 

 

 

错误信息:

Exception in thread "main" org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property: personSXPKOneToOne
 at org.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:44)
 at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId
(AbstractSaveEventListener.java:99)
 at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
 at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
 at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94)
 at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
 at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
 at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
 at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
 at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
 at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
 at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
 at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
 at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:456)
 at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:334)
 at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
 at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
 at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
 at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
 at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
 at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
 at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
 at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
 at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
 at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
 at pack.java.test.HibernateDemoXS_PK_OneToOne.savePerson(HibernateDemoXS_PK_OneToOne.java:31)
 at pack.java.test.HibernateDemoXS_PK_OneToOne.main(HibernateDemoXS_PK_OneToOne.java:15)

分享到:
评论

相关推荐

    hibernate常见异常

    org.hibernate.id.IdentifierGenerationException 是一种常见的异常,通常是由于 &lt;id&gt; 元素配置不正确所致。&lt;id&gt; 元素缺少其子元素 &lt;generator&gt;&lt;/generator&gt; 的配置引起。解决方案是检查 &lt;id&gt; 元素的配置,确保其子...

    SSH整合项目中容易出现的错误

    1. org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save() 这个错误是由于在Hibernate的mapping文件中,&lt;id&gt;元素没有正确配置,缺少了其子元素的...

    Hibernate映射导致的几个异常

    - **IdentifierGenerationException**:如果`&lt;id&gt;`元素没有正确配置,例如缺少`&lt;generator&gt;`子元素,或`class`属性设置不当(如`increment`, `identity`, `sequence`, `hi-lo`, `native`等),则会抛出此异常。...

    hibernate常见问题及处理.doc

    4. `org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save():` 此异常意味着在尝试保存对象前,对象的主键没有被正确设置。通常,这是由于在映射...

    ssh框架报错分析集合

    1. `org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save()` 这个异常通常是因为Hibernate在尝试保存对象时,发现对象的ID没有被正确地设置或生成...

    框架集合错误解决方案

    org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save() ``` **问题描述:** 当尝试保存一个实体对象时,如果该对象的`id`字段没有被手动赋值,...

    hibernate常见错误解决方案

    **PropertyNotFoundException: Could not find a setter for property name in class hibernate.Hello_Bean** **异常描述:** 此异常表明Hibernate试图为实体类中的某个属性设置值时找不到对应的setter方法。 **...

    Hibernate面试题-详尽解析

    - **配置示例**: 例如,在配置文件中可以指定`org.hibernate.dialect.MySQL5InnoDBDialect`,表示使用MySQL的InnoDB引擎相关的SQL方言。 #### 四、Hibernate控制下的POJO呈现的三种状态 - **4.1 transient(暂态)...

    JAVA常见错误大全.pdf

    8. IdentifierGenerationException:这个异常出现在无法生成实体标识符的情况下,比如数据库序列值无效或者配置错误。 9. Struts HTTP Status 404:这个错误表示客户端请求了一个不存在的资源。这可能是因为web.xml...

    编程语言Javaweb常见错误.pdf

    3. HibernateException:Hibernate是一个开源的ORM(对象关系映射)框架,文档中提到的/Hibernate.cfg.xml not found异常表明Hibernate配置文件未找到。可能的原因包括配置文件未放置在项目的根目录下,或者配置文件...

    Java常见错误分析文档

    ` 如果数据库中不存在ID为100的记录,则会触发此异常。 **解决方案**: - 检查SQL语句是否正确,确保查询条件无误。 - 确认数据库中存在符合条件的数据记录。 ##### 2. 类找不到 (ClassNotFoundException) **问题...

    Javaweb常见错误.pdf

    19. **IdentifierGenerationException**:高位表(如用于生成唯一ID的表)未初始化。检查相关表是否已填充初始值。 20. **SQL语法错误**:在SQL语句中存在非法字符,如在表名中使用了非法字符“-”。用合法的下划线...

    java错误大全(包括基本异常和开源框架出现的异常)

    Java错误大全涵盖了从基础异常到特定开源框架如Hibernate和Struts中可能出现的异常情况。以下是一些关键知识点的详细说明: 1. **错误类型:**Java中的错误通常分为两种主要类型,异常(Exception)和错误(Error)...

    java常见错误集锦.pdf

    19. **IdentifierGenerationException**:高位表(如用于生成ID的表)未初始化。检查生成ID的机制,确保表中有初始记录。 20. **SQL语法错误**:在XML映射文件中存在非法字符,如在表名中使用了非法字符。替换为...

    ava常见错误以及可能原因集锦

    19. **IdentifierGenerationException**:高位表(如用于生成唯一ID的表)未初始化。检查生成策略配置。 20. **SQL语法错误**:在XML映射文件中存在非法字符。例如,模块名中的"-"需要替换为合法的表名。 21. **...

    JAVA错误处理大集合

    - **示例**:`java.lang.NoClassDefFoundError: org/objectweb/asm/Type`。 - **解决方法**: - 添加ASM库到项目的依赖中。 - 确认版本兼容性。 #### 结论 以上列举了一些常见的Java错误及其处理方法。理解这些...

    JAVA错误处理大集合.doc

    14. **HibernateException: /hibernate.cfg.xml not found**:Hibernate配置文件未找到。确保文件位于项目根目录,或正确配置了配置文件路径。 15. **ConstraintViolationException**:使用了错误的数据库。检查...

    java常见错误以及可能原因集锦

    19. **IdentifierGenerationException**:高位表(如hi/lo算法)未初始化。确保在高位表中有初始记录。 20. **SQL语法错误**:在HQL或SQL语句中存在语法错误,如非法字符,需要修正。 21. **插入集合行失败**:在...

    Java常见问题及处理.docx

    9. **无效的身份**:这通常与序列号冲突有关,特别是在并发环境中使用序列生成ID时。 10. **表名或列名不存在**:确保数据库中存在你引用的表,且数据已正确插入。 11. **不支持的类或版本错误**:这可能是由于...

Global site tag (gtag.js) - Google Analytics