在学习hibernate annotation的时候遇到一个疑问:SQL SERVER数据库有自增主键的时候,使用annotations的时候设置@Id后,插入提示:当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'Teacher' 中的标识列插入显式值。代码如下:
public static void main(String[] args) {
Teacher t = new Teacher();
t.setName("annotations");
t.setTitle("annotations test");

Configuration cfg = new AnnotationConfiguration();
SessionFactory sf = cfg.configure().buildSessionFactory();
Session session = sf.openSession();
session.beginTransaction();
session.save(t);
session.getTransaction().commit();
session.close();
sf.close();


}
@Entitypublic class Teacher {
private int id;
private String name;
private String title;

@Id
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}

解决方案 »

  1.   

    先在数据库把IDENTITY_INSERT 设置为on
    然后执行插入语句试试
      

  2.   

    不想改动数据库。
    如果是配置实体类的hbm.xml,设置<generator class="native">是可以的
    在annotations里该怎么设置呢?
      

  3.   

    hbm.xml   标识列是否正确设置了设置了<id name="aid" type="java.lang.Integer">
                             <column name="aid" />
                           <generator class="native 标识类型" />
                          </id>
      

  4.   

    如果设置正确   hibernate一般不用设置主键    会按照你设置的方式自动增添主键的
      

  5.   

    楼上的兄弟,我是用的annotations!!