hibernate常见错误

<set  name="emails" table="email">
   <key>
    <column name="userID" />
   </key>
  
   <one-to-many class="com.dada.hibernate.Email"/>
  </set>
 
 
  在一对多的时候,如果配置文件,hbm.xml的配置是这样的那么就会发生下面的问题
 
  Association references unmapped class: com.dada.hibernate.Email
  就是说这配置文件引用/参考了一个没有被映射的class,为什么呢?因为这个class里面的
  一些属性没有被配置进来,如果想要使用它们的话就必须要把它里面的属性全部的都配置进来
  才行的.
 
 
  各种集合存放数据的方式和特点:
 
  set:存放的数据没有没有顺序,不可以重复
  它的存放使用的是set接口的hashSet()
 
  list:存放的数据可以重复,但是它是由顺序的
  它的存放使用的是List接口的ArrayList()

  bag:它存放的数据是可以重复的,但是它的数据时没有顺序的
  它使用的是Collection接口的ArrayList实例
  baglist
 
  错误1:
  Could not parse mapping document from resource com/dada/idbag/Useridbag.hbm.xml
  信息:配置文件无法读取
  原因:配置文件的语法出现了问题.
  通常情况下,如果软件没有明确的提示,错误通常出现在集合的配置上,比如使用<list>标签
  代替<set>标签,可是结果是把<list>标签是带上了,可是忘记了把原来的<set>标签给删除掉
  那么结果就会出现这种错误的.
 
  Could not execute JDBC batch update
  这种错误时无法执行成批的更新操作,这是因为插入的数据跟数据库中所定义的数据类型有了差
  异所造成的,所以解决的办法就是去数据库里面看看,数据类型跟自己所要插入的是否一致,而且
  这种错误大部分都是由提示的,我可以根据这种提示去查找出错的原因.
 
  org.hibernate.id.IdentifierGeneratorFactory$2 cannot be cast to java.lang.Integer
  这种错误的原因是:自己在取定义idbag的自动增长的时候出现了问题,问题在于
  <collection-id type="java.lang.Integer" column="idx">
        <generator class="identity"></generator>
        </collection-id>
  这个地方的<generator>标签中的class不能设置为identity,而必须设置为increment才行.
 
 
  Session is closed!
  这种情况出现的大部分情况是因为两个线程公用了一个session而这个session在第一个线
  程使用完了之后就已经关闭了,所以当第二个线程去使用它的时候就会出现这种错误的.
  所以为了增加代码的重用性,可以把下面的一部分
  Configuration config = new Configuration();
 SessionFactory sf = config.configure().buildSessionFactory();
  给提升到成员变量的位置,但是不可以把
  Session session = sf.getCurrentSession();
  session也提到成员变量的位置,否则就会在程序运行的时候出现错误的.
 
 
  component的用法是这样的,它是向一个表里面插入数据的,所以呢,就是说,如果你在两个类里面的
  所有的数据都是向同一个表中插入的,而不是要有一个分的表.
 
 
   org.hibernate.hql.ast.QuerySyntaxException: useridbag is not mapped [from useridbag]
  
   如果是这个错误,说明的是Query错误,就是在查询的时候出现的错误,这个错误通常出现的原因是
   子书写的不认真,就是在查询数据的时候的这句话
   Query qr = session.createQuery("from Useridbag");
   这里面的from后面的类的名字的大小写是敏感的,所以必须要完全的对应才行.
  
   如果说两个表都是有主键的表并且他们又是有外键关联的,那么这种情况下就要这么做了,就是在
   进行逆向工程的时候,两个类中,它中要包含我,我中药包含它,但是在插入数据的时候,以主键所在
   的类为主去插入数据,但是呢在设置的时候还是要互相的包含去设的,比如:
  
   u2.setProfile(profile);
  //将user加入profile
  profile.setUserCom(u2);
  
  这种情况下针对的是两张表的.
  
  每一个通过hibernate生成的table对应的类都要有一个空的构造方法,否则程序无法去自动的调用它,然后就会出现错误的.
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值