现在想要手动赋值数据库表主键的值,不需要数据库自增,使用注解方式@Id
@Column(name = "id", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}上面这样的方式hibernate 在执行sessionFactory.getCurrentSession().save(user) 的时候可以打印出sql语句
insert
into
user(name,password)
values(?,?)
sql语句少了一个主键id的赋值(这里的id是我手动赋值的,不使用hibernate自动生成) 报错如下:Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '' for key 'PRIMARY'然后 换了一个注解主键的方式@Id
@Column(name = "id", nullable = false)
@GeneratedValue(generator = "id")
@GenericGenerator(name = "id", strategy = "assigned")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}这种方式不报错,也执行了save(user)的方法,但是控制台没有打印sql语句,数据库也没执行insert方法,怎么解决?
@Column(name = "id", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}上面这样的方式hibernate 在执行sessionFactory.getCurrentSession().save(user) 的时候可以打印出sql语句
insert
into
user(name,password)
values(?,?)
sql语句少了一个主键id的赋值(这里的id是我手动赋值的,不使用hibernate自动生成) 报错如下:Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '' for key 'PRIMARY'然后 换了一个注解主键的方式@Id
@Column(name = "id", nullable = false)
@GeneratedValue(generator = "id")
@GenericGenerator(name = "id", strategy = "assigned")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}这种方式不报错,也执行了save(user)的方法,但是控制台没有打印sql语句,数据库也没执行insert方法,怎么解决?
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private @Getter @Setter Long id;
2.在数据库表中设置自动生成即可自动生成主键手动生成 同理 也需要在两边设置
<generator class="assigned"></generator>
</id>
sessionFactory.getCurrentSession().save(user) ;//在执行这一句之前,你为什么不手动给 user.setId("yourId"); 呢?