`
younglibin
  • 浏览: 1211055 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate 没有id属性 怎么更新数据

阅读更多

今天用hibernate 查了几个表(这几个表只有 基本属性字段,没有 id )!查询数据时,还没什么问题!

就在 更新 数据时 ,因为这几个表中都没有 id ,调用 hibernate 的查询 方法时 ,提示

如下错误:
元素类型“class”的内容必须与“(meta*,subselect?,cache?,synchronize*,comment?,tuplizer*,(id|composite-id),discriminator?,natural-id?,(version|timestamp)?,(property|many-to-one|one-to-one|component|dynamic-component|properties|any|map|set|list|bag|idbag|array|primitive-array)*,((join*,subclass*)|joined-subclass*|union-subclass*),loader?,sql-insert?,sql-update?,sql-delete?,filter*,resultset*,(query|sql-query)*)”匹配。

 

最后查找后 得知是 因为 hibernate 映射文件 中没有 id 找不到指定要更新的列 ;

 

这里的id 也就是 这个表的一个主键 ,也就是 只要哦找到一个 “主键”即可:

 

那么什么是:“主键”?

主键
能够唯一表示数据表中的每个记录的【字段】或者【字段】的组合就称为主键。 一个主键是唯一识别一个表的每一记录,但这只是其作用的一部分,主键的主要作用是将记录和存放在其他表中的数据进行关联。

 

作用
1、主键唯一的识别每一记录;
2、主键将记录和存放在其他表中的数据进行关联。在这一点上,主键是不同表中各记录之间的简单指针。

 

 

可以通过两种方式确定主键,

一种是基于实体类的复合主键,

另一种是通过定义主键类来实现。

不管通过哪种方式,复合主键都需要实现equals方法和hashcode方法,以作为不同数据之间是别的标志。

一.

基于实体类属性的复合主键
主键由实体类中的属性组成。

user.hbm.xml:

 

<?xmlversion="1.0"?>
<!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<classname="cn.blogjava.start.TUser"table="t_user"catalog="sample">
<composite-id>
<key-propertyname="lastname"column="lastname"type="string"/>
<key-propertyname="firstname"column="firstname"type="string"/>
</composite-id>

<propertyname="age"type="integer"column="age"/>
</class>
</hibernate-mapping>

 
po:

publicclassTUserimplementsjava.io.Serializable{

//Fields

privateIntegerage;

privateStringfirstname;

privateStringlastname;

publicIntegergetAge(){
returnage;
}

publicvoidsetAge(Integerage){
this.age=age;
}

publicStringgetFirstname(){
returnfirstname;
}

publicvoidsetFirstname(Stringfirstname){
this.firstname=firstname;
}

publicStringgetLastname(){
returnlastname;
}

publicvoidsetLastname(Stringlastname){
this.lastname=lastname;
}

自己实现 equals和hashCode ........

 

 既然 找到了 “主键” hibernate 就被欺骗了 !我们就可以用hibernate 进行操作了

 

 

1
0
分享到:
评论

相关推荐

    Hibernate数据类型映射及ID

    在这里,`name`属性指定了实体类中的ID字段名称,`type`属性指定了ID字段的数据类型,而`column`元素用于指定数据库表中对应的列名以及精度等细节。不同的ID生成策略包括`increment`、`assigned`、`sequence`、`...

    Hibernate更新某些字段

    Hibernate 更新某些字段 ...在 Hibernate 的 XML 配置文件中,我们可以设置某些属性的 update 属性为 false,这样 Hibernate 就不会更新这些属性。例如,我们可以设置 age 属性的 update 属性为 false: ```xml ...

    Hibernate_3.2属性文档介绍_中文

    总之,Hibernate 3.2的属性文档介绍了框架中关于属性配置的全面指南,涵盖了从基本数据类型到复杂复合类型的各种映射策略,以及性能优化技巧。对于Java开发者而言,深入理解并熟练掌握这些知识,将有助于构建出高...

    Hibernate映射集合属性List

    这里的"List"是Java集合框架中的一个接口,用于存储一组有序的元素,而在Hibernate中,它常用来映射数据库中的数组、列表或集合类型的数据。本文将详细探讨如何使用Hibernate映射集合属性List,以及如何让Hibernate...

    Hibernate 显示数据库数据

    【标题】"Hibernate 显示数据库数据" 在Java开发中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以用Java对象来操作数据库记录。本教程针对初学者,将介绍如何使用...

    Hibernate集合属性的延迟加载.doc

    在 Hibernate 框架中,延迟加载(Lazy Loading)是一种优化数据访问性能的重要技术。它允许我们只在真正需要数据时才从数据库加载,避免一次性加载大量数据导致的内存消耗和性能瓶颈。当我们处理与实体相关的集合...

    hibernate入门数据简单插入

    标题"hibernate入门数据简单插入"指的是使用Hibernate框架进行数据库的基本操作,特别是数据的插入。Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者在应用程序中处理数据库对象,而无需直接编写...

    springboot2.0多数据源集成hibernate配置hibernateDaoSupport示例

    在Spring Boot中,数据源可以通过`spring.datasource.*`的配置属性进行设置。对于多数据源,我们需要创建多个数据源配置,例如: ```yaml spring: datasource: primary: url: jdbc:mysql://localhost:3306/main_...

    SSH CRM 项目Hibernate操作数据字典源码(3)

    在Hibernate中,数据字典对应的实体类会包含一系列属性,每个属性对应数据库表中的字段。例如,数据字典可能有一个实体类`Dictionary`,其中包含`id`、`name`、`code`等属性。这些属性通过注解或XML配置文件与数据库...

    Hibernate中数据类型

    Hibernate 提供了多种数据类型,用于匹配不同数据库系统支持的标准 SQL 数据类型。这些数据类型包括: - **数值类型**:例如,`byte` 和 `java.lang.Byte` 映射到 `TINYINT`,`short` 和 `java.lang.Short` 映射到 ...

    HIBERNATE FOR NETBEANS 数据操作方法

    **Hibernate for NetBeans 数据操作方法** Hibernate 是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。NetBeans 是一款强大的集成开发环境(IDE),提供了丰富的功能来支持...

    hibernate数据源

    Hibernate 数据源是 Hibernate 框架中连接数据库的关键组件,它是 Hibernate 与底层数据库进行交互的桥梁。在 Hibernate 应用程序中,数据源扮演着存储数据库连接信息的角色,包括数据库URL、用户名、密码等,使得 ...

    Hibernate执行持久层访问步骤

    1. 插入数据:调用Session的save()或saveOrUpdate()方法,Hibernate会自动为无ID的对象生成ID,并将其保存到数据库。 2. 更新数据:使用update()或saveOrUpdate()方法更新已存在的实体状态。 3. 删除数据:调用...

    JAVA数据类型与Hibernate的类型映射

    而在Java持久化框架Hibernate中,这些数据类型需要与数据库中的字段类型进行映射,以便正确地存储和检索数据。这篇博客主要探讨了Java数据类型如何与Hibernate的类型映射进行对应。 首先,Java的基本数据类型在...

    利用hibernate中的SchemaExport生成数据表

    在这个例子中,我们创建了一个名为`User`的简单类,包含`id`,`name`和`password`三个属性,以及对应的getter和setter方法。 2. **编写映射文件**: 随后,我们需要为`User`类创建一个`.hbm.xml`映射文件。在这个...

    hibernate更新数据方法小结

    在Hibernate框架中,更新数据库中的数据是一个常见操作,但往往需要以正确的顺序和方法来实现。Hibernate提供了一系列的API...此外,在多用户环境下进行数据更新时,还需要考虑并发控制的策略,以保证数据的一致性。

    hibernate属性级别注解实例代码

    Hibernate属性级别注解是Hibernate ORM框架中用于在Java对象(实体类)的属性上定义数据库映射的关键元素。这些注解使得开发人员能够无需XML配置文件就能声明对象与数据库之间的映射关系,从而简化了开发过程。以下...

    hibernate 中的lazy属性祥解.txt

    `lazy`属性是Hibernate中用于控制数据加载策略的一个关键参数,主要用于延迟加载关联对象。当一个对象被加载时,与其关联的对象不一定立即加载到内存中,而是等到真正需要使用时才加载,这就是懒加载(Lazy Loading...

    hibernate的_映射、三态、脏数据、Session缓存

    2. **级联保存**:`cascade="save-update"`属性意味着当保存或更新班级时,也会级联保存或更新相关的学生对象。 3. **inverse属性**:inverse属性用于指定一方是否负责维护关联关系。当`inverse="true"`时,意味着另...

    hibernate对Blob类型字段进行数据添加.txt

    ### Hibernate 对 Blob 类型字段进行数据添加 #### 知识点概述 在处理数据库操作时,经常需要存储二进制大对象(Binary Large Object,简称 BLOB),例如图像、视频等非文本数据。BLOB 类型是数据库系统中用于存储...

Global site tag (gtag.js) - Google Analytics