hibernate 没有id属性 怎么更新数据
来源:互联网 发布:淘宝抢购插件 编辑:程序博客网 时间:2024/05/17 12:02
今天用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、主键将记录和存放在其他表中的数据进行关联。在这一点上,主键是不同表中各记录之间的简单指针。
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 ........
- 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 进行操作了
0 0
- hibernate 没有id属性 怎么更新数据
- hibernate 没有id属性 怎么更新数据
- 建一张没有id属性的表,hibernate的映射文件要怎么写
- SpringMVC-Hibernate关于数据更新没有持久化的问题
- 映射Hibernate如果指定了column的相关属性,则name属性必需.id如果没有配置name与属性对应,则取不出id
- Hibernate映射文件ID属性
- 插入数据库提示Hibernate: select max(id) from ....然后数据库没有插入数据
- ViewPage怎么更新数据
- hibernate怎么得到插入数据的主键 或者自动增值的id
- hibernate怎么得到插入数据的主键 或者自动增值的id
- hibernate更新数据问题
- hibernate更新数据
- Hibernate批量更新数据
- Hibernate更新数据
- Hibernate更新数据
- Hibernate 批量更新数据
- hibernate 更新数据注意事项
- 最近没有怎么更新BLOG了
- 利用word2vec对关键词进行聚类
- p122 第三章 第17题 潘璠
- javascript权威指南关键点[持续更新中]
- 浏览器页面构造原理
- 斯坦福大学 机器学习 相关知识点介绍
- hibernate 没有id属性 怎么更新数据
- 啥时候开始都不晚。
- Todo
- Top 5 Reasons Why You Need a Career Change
- 条件表达式的嵌套
- 控制情绪8
- jQuery.noConflict() 函数详解
- Vold之CommandLinstener 4 模块分析
- 2015/4/21