我使用SSH框架做一个添加产品类别工能,用到两个Dao方法,一个查找类别名称是否存在,如果不存在,就用后面的另一个Dao方法添加类别。我在产品类别的实体类中加了@version注解,但是还是不起作用,代码如下:Service层方法:
@Override
public boolean add(Integer parentId, String name, String note) {
ProductCategory productCategory = productCategoryDao.findByName(name);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(productCategory == null){
productCategory = new ProductCategory();
productCategory.setName(name);
productCategory.setNote(note);
if(parentId == null){
productCategory.setParentCategory(null);
}else{
productCategory.setParentCategory(new ProductCategory(parentId));
}
productCategoryDao.save(productCategory);
return true;
}
return false;
}
Dao层方法:
public ProductCategory findByName(String name) {
@SuppressWarnings("unchecked")
List<ProductCategory> list = getHibernateTemplate().find("from ProductCategory obj where obj.name=?", name);
if(list.size()>0){
return list.get(0);
}
return null;
}public void save(Object entity) {
getHibernateTemplate().save(entity);
}实体类:
@Entity
public class ProductCategory implements Serializable { private static final long serialVersionUID = 7664955768677436097L;
private Integer id;//产品类别id
private int ver;
private String name;//产品类别名称
private Boolean visible = true;//产品类别是否可见,默认为可见
private String note;//产品类别备注,用于关键字搜索
private ProductCategory parentCategory;//产品父类别
private Set<ProductCategory> childCategorys;//产品子类别
public ProductCategory(){}
public ProductCategory(Integer id){
this.id = id;
}
@Id
@GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Version
public int getVer() {
return ver;
}
public void setVer(int ver) {
this.ver = ver;
}
@Column(nullable=false,length=36)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getVisible() {
return visible;
}
public void setVisible(Boolean visible) {
this.visible = visible;
}
@Column(length=200)
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
//产品类别更新,父类别就级联更新
@ManyToOne(cascade=CascadeType.REFRESH)
@JoinColumn(name="parentId")
public ProductCategory getParentCategory() {
return parentCategory;
}
public void setParentCategory(ProductCategory parentCategory) {
this.parentCategory = parentCategory;
}
@OneToMany(cascade={CascadeType.REFRESH,CascadeType.REMOVE},mappedBy="parentCategory")
public Set<ProductCategory> getChildCategorys() {
return childCategorys;
}
public void setChildCategorys(Set<ProductCategory> childCategorys) {
this.childCategorys = childCategorys;
}

@Override
public int hashCode() {

return super.hashCode();
}
@Override
public boolean equals(Object obj) {

return super.equals(obj);
}

}