‘Hibernate实践’ 分类下的所有文章
2010十月8

实体类与数据库表的对应关系配置优越性

实体类与数据库表对应关系通过XML配置起来,那么当数据库表字段改变时,只需将配置文件将稍微的调整即可,而在类文件中因为使用的是实体类,没有直接与数据库表关系,所以数据库的改动将影响很小。
即:间接使用对象,使用对象与原来对象通过配置文件进行配置,一如DAO与BLL,也是注入配置而成。

2010十月2

实体类得不到外键的信息

Hibernate实践 评论关闭

Set<UserInfo> users = dept.getUserInfos();

得不到当前部门下所有的员工信息,原因是:dept的产生是来自页面,即没有通过数据库产生,故不会有UserInfos信息,通过
deptInfo = deptInfo_manager.getDeptInfo( deptInfo.getId() ); 解决。

即:实体类要想得到数据库数据,那么别忘记一定要让此实体类与数据库连接!!!

2010十月2

Hibernate主键生成方式

Hibernate实践 评论关闭

?以在*.hbm.xml中指定方式为准,即使在程序中设置了主键值,在插入更新时还是采用的是配置文件中指定的主键的生成的方式,
除非主键生成方式为assigned,由程序生成,此时在程序中设置主键才有效!

2010十月2

inverse cascade

Hibernate实践 评论关闭

<set name=”userPowers” inverse=”true”>
??? <key>
??????? <column name=”cid” />
??? </key>
??? <one-to-many />
</set>

inverse指定由谁控制,inverse = false,由自己控制关系。即当自己更新时,自动更新对方,而对方更新时,就不会自动更新自己。
cascade指定更新的权限,若不设置,在inverse = false时,已方任何改动都会反映到对方,若想进一步控制,可用cascade细分

cascade能设置的值有
all??????????????????????? 相当save-update加上delete
all-delete-orphan?? 相当all,并且会删除去父类失去关联的子类比如说Article.CommentList.RemoveAt(0),就会删除第一个子类
none??????????????????? 父类的操作不会关联到子类
save-update???????? 添加和更新进行级联操作
delete????????????????? 删除父类时,删除子类
delete-orphan?????? 删除父类时,删除父类没有关系的子类

<one-to-many>中,建议inverse=”true”,由“many”方来进行关联关系的维护 ,若设置one方为主方,则在删除时会自动删除子方,会删除大量数据。

<many-to-many>中,只设置其中一方inverse=”false”,或双方都不设置

参考实体类:person, son
one方:一个person对应多个son,son存在person的set中
many:一个son对应一个father
若双方都不设置inverse,都是受方
那么:?? Son为tom, Father为Davin,现在tom想改Father为Kax
son.setFather( Kax );
但:person.getSons().get( tom );仍会返回,指示Davin仍拥有tom,出现错误。
这里的关系指的是:one中一个与Set的关系???? 而many中一个与一个的关系, 将关系分成两部分,要指定一方来维护这种关系才可,否则须要手动编码来维护这种关系。

2010十月2

DAO方法

insertUser( User user ) C

getUser( String userId ) R
getAllUsers()
findUsersByProperty( String propertyName, Object propertyValue )

updateUser( User user ) U

deleteUser( user user ) D

2010十月2

更换数据库名称

Hibernate实践 评论关闭

要注意:除了在dataSource指定URL中更改的数据库名称外,还要相应修改 *.hbm.xml 的catalog指定的数据库名称

注: catalog作用: 为表名指定归属。
即:form myDB.news 当catalog=”myDB”时
可将catalog删除掉,此时默认的从从url指定的数据库名查找: from news ( 默认数据库 )
可看出:当一个项目仅用到一个数据库时删除掉catalog即可。

2010十月2

数据库字段命名

Hibernate实践 评论关闭

利用Hibernate时,它本身采用的是驼峰风格,若在表中指定is_index字段名,在自动生成实体类时,会将名称转成isIndex,造成数据库与实体类字段名称不一致,故为了统一,最好在数据库字段命名时采用驼峰风格

2010十月2

hibernate如何获取总记录数

Hibernate实践 评论关闭
int num = 0;
Long count = null;
StringBuffer queryTemp=new StringBuffer();
queryTemp.append("SELECT COUNT(*)FROM Salesrecords AS a");
queryTemp.append(" ORDER BY a.id DESC");
count = (Long)getHibernateTemplate().find(queryTemp.toString()).listIterator().next();
      ##上边返回的是Long,而不是Integer
 num = count.intValue();