报错的场景
使用Hibernate的JPA ,从BaseModel 的代码可以看出主键用到了自增
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import play.db.jpa.GenericModel;
/**
* Base class for JPA model objects
* Automatically provide a @Id Long id field
*/
@MappedSuperclass
public class BaseModel extends GenericModel {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public Long id;
public Long getId() {
return id;
}
@Override
public Object _key() {
return getId();
}
}
t_bids类继承BaseModel
package models;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.Transient;
import com.hzjr.p2p.utils.DateUtil;
import constants.Constants;
import utils.Security;
/**
* 标
*
* @author bsr
* @version 6.0
* @created 2014-4-4 下午03:32:02
*/
@Entity
public class t_bids extends BaseModel {
public long user_id;
public Date time;
public String bid_no;
public String mer_bill_no;
public String ips_bill_no;
public long product_id;
public String title;
public long loan_purpose_id;
public long repayment_type_id;
public double amount;
public int period;
public double min_invest_amount;
public double average_invest_amount;
public int invest_period;
public Date invest_expire_time;
public Date real_invest_expire_time;
public double apr;
public long bank_account_id;
public int bonus_type;
public double bonus;
public double award_scale;
public String image_filename;
public boolean is_quality;
}
数据库也设置其为自增属性 在保存该数据时又给主键赋值了从而出现报错
这是由于@GeneratedValue 自增不能赋值,无论是创建还是更新时一旦有赋值就抛出异常。
解决办法:
1.在存储数据的时候,要记得把主键这一项设置为空.否则,是不可以存储的,因为已经identity了.
2.去掉@GeneratedValue自增