现在想要手动赋值数据库表主键的值,不需要数据库自增,使用注解方式@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方法,怎么解决?

解决方案 »

  1.   

    1.在java类中我们是这样子设置的:
     @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private @Getter @Setter Long id;
    2.在数据库表中设置自动生成即可自动生成主键手动生成 同理 也需要在两边设置 
      

  2.   

    ORM 微持久框架 http://www.verejava.com/?section_id=1704463330451
      

  3.   

            <id name="userid" column="userid">
                <generator class="assigned"></generator>
            </id>
      

  4.   

    既然你已经设置了手动程序去设置主键id,为什么不手动给 user.setId("yourId"); 呢?
    sessionFactory.getCurrentSession().save(user) ;//在执行这一句之前,你为什么不手动给 user.setId("yourId"); 呢?