以下是USER_INFO表所映射的实体类,是以注释的方式映射的package com.feinno.model.user;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Version;@Entity
@Table(name = "USER_INFO", schema = "CDB")
public class User implements java.io.Serializable { private long id;
private String username;
private Long version;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator="USER_INFO_SEQUENCE")
@SequenceGenerator(name="USER_INFO_SEQUENCE",sequenceName="USER_INFO_SEQ",allocationSize=1)
@Column(name="ID")
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
} @Column(name = "USERNAME", length = 20)
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
} @Version
@Column(name="VERSION")
public Long getVersion() {
return version;
}
public void setVersion(Long version) {
this.version = version;
}
} /**
* 这是在执行saveOrUpdate(user) 以前USER_INFO表中的数据
* ID USERNAME VERSION
* 1 AAA 0
*/
User user = new User();
user.setId(1L);
user.setUsername("BBB");
super.getHibernateTemplate().saveOrUpdate(user);
/**
* 执行以后 USER_INFO表中的数据如下:
* ID USERNAME VERSION
* 1 AAA 0
* 2 BBB 0
*/
/**
* 本来我是想把id==1的这条数据的USERNAME这个字段更新成BBB,结果并没有
* 更新成功,反而还插入了一条新的数据,对此很不理解,希望各位大侠们解答一下
* 谢谢了 !
*
* 我声明一下:如果把User类中的version属性去掉的话,那么就一切正常
* 不明白为什么加上version属性后,就不能更新了
*/
先谢谢各们高手了
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Version;@Entity
@Table(name = "USER_INFO", schema = "CDB")
public class User implements java.io.Serializable { private long id;
private String username;
private Long version;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator="USER_INFO_SEQUENCE")
@SequenceGenerator(name="USER_INFO_SEQUENCE",sequenceName="USER_INFO_SEQ",allocationSize=1)
@Column(name="ID")
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
} @Column(name = "USERNAME", length = 20)
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
} @Version
@Column(name="VERSION")
public Long getVersion() {
return version;
}
public void setVersion(Long version) {
this.version = version;
}
} /**
* 这是在执行saveOrUpdate(user) 以前USER_INFO表中的数据
* ID USERNAME VERSION
* 1 AAA 0
*/
User user = new User();
user.setId(1L);
user.setUsername("BBB");
super.getHibernateTemplate().saveOrUpdate(user);
/**
* 执行以后 USER_INFO表中的数据如下:
* ID USERNAME VERSION
* 1 AAA 0
* 2 BBB 0
*/
/**
* 本来我是想把id==1的这条数据的USERNAME这个字段更新成BBB,结果并没有
* 更新成功,反而还插入了一条新的数据,对此很不理解,希望各位大侠们解答一下
* 谢谢了 !
*
* 我声明一下:如果把User类中的version属性去掉的话,那么就一切正常
* 不明白为什么加上version属性后,就不能更新了
*/
先谢谢各们高手了
解决方案 »
- CSS 浮动真蛋疼 大虾求助
- SSH hibernate自动生成表的问题
- 关于struts2中的result type中的dispatcher遇到的困境
- POI导出excel,数据量大的时候出现一些问题,请各位指教!!!
- JAVA与DLL问题
- UltraEdit使用方法
- 正则表达式取2个值
- 请教各位大虾 Struts 中的 <logic:iterate 怎么使用?
- OC4J在RedHat AS 3上的性能问题!
- 如何使得linux平台Eclipse开发的程序和Windows平台的兼容
- logging与log4j的区别?
- 同一个Action里面两个操作方法都需要通过ActionForm表单验证,配置文件Action的input属性该怎么配置
应该调用Update方法吧·?··!···
User user = new User();如果你要update的话,那么应该先通过get方法,取出id=1的那个user,
然后修改它的名称,再调用:
super.getHibernateTemplate().saveOrUpdate(user);
此时,系统会自动调用update方法。
如果你更新的version 比现有的高,那么一点问题没有了。
另外,更新应该是先load,然后set,最后update才行,你的这个做法不是正确的方法。
user.setId(1);
super.getHibernateTemplate().saveOrUpdate(user);
//如果数据库中有id为1的记录,而且不加version这个映射的话,这样是可以直接更新的
先select根据你USER的ID查询,如果有数据就UPDATE
否则 insert