遇到如下问题:
在浏览器显示getSession().save(…)这句一直报nullException.
首先肯定不是getSession的问题,参考网上的用法都是这样使用的,getSession()而且代码是自动生成的(在hibernateSessionFactory.java中)。
于是去看看myeclipse的Console错误,配置文件错误:
org.hibernate.InvalidMappingException: Could not parse mapping document from resource hibernate/Plus.hbm.xml
进而去查看配置文件×××.hbm.xml,原来使用了composite-id这个属性。
查看如下资料:
<composite-id
name="propertyName"
class="ClassName"
unsaved-value="undefined|any|none"
access="field|property|ClassName"
node="element-name|."
>
<key-property name="propertyName" type="typename" column="column_name"/>
<key-many-to-one name="propertyName class="ClassName" column="column_name"/>
......
</composite-id>
For a table with a composite key, you may map multiple properties of the class as identifier properties. The <composite-id> element accepts <key-property> property mappings and <key-many-to-one> mappings as child elements.
如果表使用联合主键,你可以映射类的多个属性为标识符属性。 <composite-id>元素接受<key-property> 属性映射和<key-many-to-one>属性映射作为子元素。
<composite-id>
<key-property name="medicareNumber"/>
<key-property name="dependent"/>
</composite-id>
你的持久化类必须重载equals()和 hashCode()方法,来实现组合的标识符的相等判断。 实现Serializable接口也是必须的。
不幸的是,这种组合关键字的方法意味着一个持久化类是它自己的标识。除了对象自己之外, 没有什么方便的“把手”可用。你必须自己初始化持久化类的实例,在使用组合关键字load() 持久化状态之前,必须填充他的联合属性。我们会在第 9.4 节 “组件作为联合标识符(Components as composite identifiers)”章中说明一种 更加便捷的方法,把联合标识实现为一个独立的类,下面描述的属性只对这种备用方法有效:
-
name (可选):一个组件类型,持有复合标识(参见下一节)。
-
class (可选 - 默认为通过反射(reflection)得到的属性类型) : 作为联合标识的组件类名(参见下一节)。
-
unsaved-value (可选 - 默认为 undefined): 如果设置为any,就表示瞬时(transient)实例应该被重新初始化,或者如果 设置为none,则表示该实例是脱管对象。最好在所有的情况下都保持默认的值。
参考:http://www.makechm.com/chmbook/0/3069-2999-2797-0370-4931.html
=======================================================
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [hibernate.Plus#hibernate.PlusId@1fbbcf6]
getSession() 获得的是原始的sessionFactory,每次你必须自己维护session如结束后你必须关闭session。如果是hibernate中进行数据库操作,你获得是原始的hibernate style和excepttion。
=====================================================
随后查看了getSession和getHibernateTemplate 使用上的区别:
http://blog.csdn.net/jianw2007/archive/2009/03/13/3986596.aspx
http://blog.csdn.net/fenixshadow/archive/2007/09/26/1802277.aspx
完整的实例:
http://www.iteye.com/topic/6629
分享到:
相关推荐
3. **复合主键**:当需要使用多个字段作为主键时,可以使用composite-id元素。 4. **继承映射**:支持多种继承映射策略,如单表(Single Table)、类表(Class Table)、子表(Subclass Table)等。 5. **属性映射**...
集合元素的关联可以通过`<key>`、`<element>`或`<composite-element>`来定义。 8. HQL与Criteria查询 Hibernate提供了HQL(Hibernate Query Language)和Criteria API两种方式来进行对象查询。HQL是一种面向对象的...
在Hibernate中定义联合主键主要依赖于`<composite-id>`标签。如示例文件所示,`Users`类被设计为具有联合主键,该主键由`name`和`tel`两个字段组成。在`<composite-id>`标签内,通过`<key-property>`子标签分别指定...
Hibernate 完整使用教程 Hibernate 是一种流行的开源持久层框架,允许开发者使用面向...composite-id 是 Hibernate 中的一种复合标识符,用于标识对象模型的唯一性。composite-id 可以通过 Java 类或 XML 文件来定义。
- **复合主键映射**:当需要多个字段共同构成主键时,可以使用`<composite-id>`标签。 4. **数据操作与事务处理**: - **数据保存**:使用`save()`方法将对象持久化到数据库。 - **数据删除**:使用`delete()`...
使用<composite-id> 标签(并且内嵌<key-property>元素)代替通常的<id>标签。比如,OrderLine类具有一个主键,这个主键依赖于Order的(联合)主键。 <composite-id name="id" class="OrderLineId"> <key-property...
- `<composite-id>` 标签用于定义复合主键,其中包含两个 `<key-property>` 标签,每个 `<key-property>` 定义了一个主键字段。 #### 四、双主键、有外键的Hibernate配置实例 复合主键同时包含外键的情况也是比较...
"Hibernate-CompositeKey"指的是在Hibernate中处理复合主键(Composite Key)的场景。复合主键是当一个表的主键由两个或更多个列共同组成时的情况。理解并正确使用Hibernate处理复合键对于优化数据模型和提高代码的...
<composite-id name="id" class="CAUserIdBean"> <key-property name="caId" type="java.lang.String"> <column name="ca_id" length="25"/> </key-property> <key-property name="activeName" type="java.lang...
在Java的持久化框架Hibernate中,复合主键(Composite Key)是一种特殊的数据结构,用于处理具有多个字段作为唯一标识的情况。本教程将深入探讨如何在Hibernate中设置复合主键,并提供一个可直接使用的配置示例。 ...
在 Hibernate 中,联合主键(Composite Key)是指由两个或多个属性共同构成的主键,这种主键在数据库设计中常见于需要多个字段唯一标识一条记录的情况。在 Hibernate 中设置联合主键通常需要以下几个步骤: 1. **...
<composite-id name="id" class="AddressId"> <key-property name="userId" type="string"/> <key-property name="addressId" type="string"/> </composite-id> <!-- 其他属性 --> </hibernate-mapping> ``` ...
在Java的持久化框架Hibernate中,复合主键(Composite Key)是一种特殊的数据结构,用于处理具有多个字段作为唯一标识的情况。本实例将深入探讨如何在Hibernate中实现复合主键,并提供一个具体的示例来帮助理解。 ...
在`hibernate.cfg.xml`中,我们需要为`Address`实体指定`composite-id`元素,对应于`AddressId`类: ```xml <hibernate-mapping> <composite-id name="id" class="com.example.AddressId"> <key-property name=...
- **composite-id联合ID**:当实体类具有多个主键字段时的映射方法。 - **识别器(discriminator)**:用于区分继承体系中的不同子类。 - **版本(version)**:乐观锁实现策略之一。 - **时间戳(timestamp)**...