<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对应的类都要有一个空的构造方法,否则程序无法去自动的调用它,然后就会出现错误的.