论坛首页 Java版 Hibernate

遇到一个事务并发问题!!!

浏览 510 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-05-05 关键字: hibernate
业务描述:
单据自动编码,编码格式为“L+年度+4位自编码”,编码每次自动增加一位,项目用的是spring+hibernate,请假高人怎么解决这个问题,我个人是想到了用hibernate的乐观锁机制,但是项目中没有hibernate的配置文件,都是spring封装了的,下面发一个bean
package com.gkhb.mis.safety.bean;

import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.annotations.Proxy;

import com.gkhb.mis.core.bean.BaseEntity;
import com.gkhb.mis.system.bean.SysGroup;
@Entity
@Table(name = "SAFETY_DEFEND_LC")
@Proxy(lazy = false)
@SequenceGenerator(name = "SEQ_STORE", sequenceName = "SEQ_ID_SAFETY_DEFEND_LC", allocationSize = 1)
public class SafetyDefendLc extends BaseEntity<SafetyDefendLc> {

	private static final long serialVersionUID = 1L;
	@ManyToOne(cascade = { CascadeType.MERGE })
	@JoinColumn(name = "SYS_GROUP_ID")
	private SysGroup sysGroup;
	@Column(name = "SYS_GROUP_CODE")
	private String groupCode;
	private String flowstate;
	private Long piid;
	private String code;
	private String applyCompany;
	private String applyClass;
	private String year;
	private String type;
	private String finishDate;
	private String content;
	private Double cost;
	private String checkIdea;
	private String checker;
	private Date checkDate;
	private String executeFact;
	private Double actualCost;
	private Date executeFinishDate;
	private String remark;
	public Double getActualCost() {
		return actualCost;
	}
	public void setActualCost(Double actualCost) {
		this.actualCost = actualCost;
	}
	public String getApplyClass() {
		return applyClass;
	}
	public void setApplyClass(String applyClass) {
		this.applyClass = applyClass;
	}
	public String getApplyCompany() {
		return applyCompany;
	}
	public void setApplyCompany(String applyCompany) {
		this.applyCompany = applyCompany;
	}
	public Date getCheckDate() {
		return checkDate;
	}
	public void setCheckDate(Date checkDate) {
		this.checkDate = checkDate;
	}
	public String getChecker() {
		return checker;
	}
	public void setChecker(String checker) {
		this.checker = checker;
	}
	public String getCheckIdea() {
		return checkIdea;
	}
	public void setCheckIdea(String checkIdea) {
		this.checkIdea = checkIdea;
	}
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public Double getCost() {
		return cost;
	}
	public void setCost(Double cost) {
		this.cost = cost;
	}
	public String getExecuteFact() {
		return executeFact;
	}
	public void setExecuteFact(String executeFact) {
		this.executeFact = executeFact;
	}
	public Date getExecuteFinishDate() {
		return executeFinishDate;
	}
	public void setExecuteFinishDate(Date executeFinishDate) {
		this.executeFinishDate = executeFinishDate;
	}
	public String getFinishDate() {
		return finishDate;
	}
	public void setFinishDate(String finishDate) {
		this.finishDate = finishDate;
	}
	public String getFlowstate() {
		return flowstate;
	}
	public void setFlowstate(String flowstate) {
		this.flowstate = flowstate;
	}
	public String getGroupCode() {
		return groupCode;
	}
	public void setGroupCode(String groupCode) {
		this.groupCode = groupCode;
	}
	public Long getPiid() {
		return piid;
	}
	public void setPiid(Long piid) {
		this.piid = piid;
	}
	public String getRemark() {
		return remark;
	}
	public void setRemark(String remark) {
		this.remark = remark;
	}
	public SysGroup getSysGroup() {
		return sysGroup;
	}
	public void setSysGroup(SysGroup sysGroup) {
		this.sysGroup = sysGroup;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public String getYear() {
		return year;
	}
	public void setYear(String year) {
		this.year = year;
	}
}


   
时间:2008-05-05
没有实体映射文件
   
0 请登录后投票
时间:2008-05-05
不明白为什么要用到hibernate的乐观锁
   
0 请登录后投票
时间:2008-05-08
lZ意思可能是要从一个数据字典表里读取一个数字来动态生成编码,但可能有两个操作同时读到这个数字 这样编码就重复了 有点高低码的味道!

呵呵 没有hibernate的配置文件??

看你用的好象是annotation吧

可以这样加个
@version
private Integer version
   
0 请登录后投票
时间:2008-05-08
而且你可以自己设计一个专门生成编码的单例。自己设置这个子编码。不过有个问题,总共4位,一年最多不到1W个记录?太少了吧?有可能重复吗?平均一天连3个都没有。
   
0 请登录后投票
时间:2008-05-08
确定你的序列样式规则:
key+value key为一定格式的编码,value(n为number序列号), key下的value不能有重复value.

value 可以直接从工具类中取得最大, 然后取余

最后规则为
key + (maxnumber%n)
   
0 请登录后投票
论坛首页 Java版 Hibernate

跳转论坛: