JPA Exception

1.当 IDENTITY_INSERT 设置为 OFF 时,不能向表 xxx 中的标识列插入显式值
  这是有Hibernate的递增标示搞出来的问题,需要设置entityBean的自增标示
  不同的数据库可能需要的标示是一样的
      mssql2000 为例:
     @Entity
     @Name("student")
     @Table("Student")
     @Scope(ScopeType.SESSION)
     public class Student{
         @Id
         @Column(name = "StudentId", unique = true, nullable = false)
         @GeneratedValue(strategy = GenerationType.IDENTITY)
         @NotNull
         public int getStudentId() {
                   return this.studentId;
         }

          public void setStudentId(int studentId) {
           this.studentId = studentId;
        }
     }
 2.object references an unsaved transient instance - save the transient instance before flushing
     这个例外是在保存一个对象的时候,原因是这条对象应用了另外的一个对象,而引用的那个对象不存在,
     解决这个问题当然是要先维护设置它们的关系,然后在保存这个对象,当然,通过设置
     他们的级联保持参数也可以.
     cascade的值只能从CascadeType.PERSIST(级联新建),CascadeType.REMOVE(级联删除),
     CascadeType.REFRESH(级联刷新),CascadeType.MERGE(级联更新)中选择一个或多个。
     还有一个选择是使用CascadeType.ALL,表示选择全部四项,
     出现这个错误可以配置CascadeType来解决问题,不过还要看是在什么情况下处的错误,如果是在更新一个对象的时候
     出现错误,可以设置CascadeType.MERGE或者CascadeType.ALL,然后调用EntityManager的merge方法。如果是在新添加
     一个对象的时候出现的错误,那么就可能是被引用的那个对象确实不存在,需要先保存它。如果你确定被引用的那个对象
     在数据库中已经存在,那么可能是它已经脱离EntityManager的管理,先把它重新查出来,就可以了,这时候CascadeType
     可以为任何参数四个参数中的任何一个或者它们的任意组合。当然,在更新一个对象的时候也可能是由于被引用那个对象
     已经不在EntityManager的管理范围内,也可以通过重新加载的方式解决问题。

3.org.hibernate.PersistentObjectException: detached entity passed to persist
       在网上找到了可能导致这个Exception的四种原因

      a. @Id标注的BEAN类属性是自动生成的,而添加的时候却设置了属性          解决方法:把SET()方法去掉
      b. @Id标注的位置错误                                               解决方法:修改位置      
      c. @Id标注的属性类型错误                                           解决方法:修改类型
      d. 多对一关联时级联关系设为CascadeType.ALL或 CascadeType.PERSIST   解决方法:修改级联关系,

         不应有  persist 
         我是在修改的时候遇到到这个问题,在添加的时候一切运行正常,
        显然以上四种解决方法都不能满足我的需要,呵呵,不过我找到第五种方法,那就是在修改的时候
    e.  用EntityManager的merge方法。
        @In 
        prvate EntityManager entityManager;
        public void update(Student student){
              entityManager.merge(student);
       }

你可能感兴趣的:(bean,Hibernate,配置管理,jpa)