本人做User表的增删改查
在添加方法的时候,由于User表的UserId是以自增长的方式进行添加的,所以在用hibernate写方法的时候,它会自动增加UserId的值,且给它赋值为0,然后报错
ERROR: 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 ‘User’ 中的标识列插入显式值。
写的service方法什么的并没有添加UserId的步骤
//添加user
@Override
public User creatUser(String Name, String Email, String Hash, boolean Enable,String Operations) {
User user = new User();
user.setLoginName(Email);
user.setLoginPassword(Hash);
user.setName(Name);
user.setEnable(true);
user.setOperations("1");
return userDao.save(user);
}
console里面打出来的结果里,insert语句中含有UserId,且UserId的值在Variables里面显示的是0
Hibernate:
insert
into
[
dbo].[User] (
Enable, Name, Operations, Email, Hash, UserId
)
values
(?, ?, ?, ?, ?, ?)
对于这种情况,我们需要在User实体类中添加一个注释
@GeneratedValue(strategy = GenerationType.IDENTITY)
应该会导入一个相对于的包import org.hibernate.annotations.GenericGenerator;
关于@GeneratedValue注释,@GeneratedValue注解的strategy属性提供四种值:
IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle 不支持这种方式;
AUTO: JPA自动选择合适的策略,是默认选项;
SEQUENCE:通过序列产生主键,通过@SequenceGenerator 注解指定序列名,MySql不支持这种方式
TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。
加入注释之后,sql语句里就不会添加UserId了
Hibernate:
insert
into
[
dbo].[User] (
Enable, Name, Operations, Email, Hash
)
values
(?, ?, ?, ?, ?)