持续更新中,遇到新的问题也会加进来。 1. java.mail的jar包不能简单的build path引入到这个项目就可以,必须放到WEB-INF下的lib中然后再build path,因为不仅开发的时候i要用到,打包部署的时候也要用到。 2. Hibernate框架下的主键generator
assigned: 在调用session.save()之前,必须手动setId(主键值),否则出错。 没有指定时的默认生成策略。 increment:自增长,为long, short或者int类型生成主键 自动增长,由hibernate维护,适用于所有的数据库,每次插入数据前先查询最大id(select max(id) from xxx),即使id已经设好值,无视。 缺点:不适合多进程并发更新数据库,适合单一进程访问数据库。不能用于群集环境。 identity:自增长 与increment不同的是: a)identity不是由hibernate控制,而是由数据库控制自增长,所插入数据前不会查询最大id。 b)以MySQL为例,如果主键字段没有开启auto_increment,会抛异常”Field ‘id’ doesn’t have a default value”。 遇到了这个错误 c)increment的insert语句包括id,identity的insert语句没有id字段。 d)假设有五条数据,id分别为1、2、3、4,删除(3、4)后,用increment增加数据id为3,用identity增加数据id为5。 不同的数据库有不同的自增长方式。如MySql是auto_increment,SQL Server 中是Identity。支持的数据库:MySql、SQL Server、DB2、Sybase和HypersonicSQL。 优点: 不需要Hibernate和用户的干涉,使用较为方便。 缺点:但不便于在不同的数据库之间移植程序。 sequence:自增长 需要底层数据库支持Sequence方式。 实现了Sequence的数据库:Oracle、DB2、PostgreSQL。 没有实现Sequence的数据库: MySQL、SQL Server、Sybase。 如果在MySql中使用该方式,hibernate会根据Dialect判断报错。 hilo:hi/low(高低位)算法,高低位算法使用一个高位值和一个低位值,然后把算法得到的两个值拼接起来作为数据库中的唯一主键。Hilo方式需要额外的数据库表和字段提供高位值来源。默认请况下使用的表是hibernate_unique_key,默认字段叫作next_hi。next_hi必须有一条记录否则会出现错误。 主键生成策略的不同点:[一篇引用博文](http://www.cnblogs.com/a1280055207/p/3173258.html)主键生成策略的注解方式:[一篇引用博文](http://www.cnblogs.com/ph123/p/5692194.html)如何映射Enum http://www.cnblogs.com/minideas/archive/2011/08/09/2132482.html 试了半天发现上面的不行,会报java.sql.SQLException: Data truncated for column ‘gender’ at row 1 for enum,把mysql中的enum改成varchar就行了用Hibernate过程中,因Student,Course的主键是int,但PPT要求为七位数,故想设成ZEROFILL,然之前已经设置了多对多映射注解,所以Grade与上面两个类间自动创建了外键约束,故无法修改Student的id属性,强行删掉Hibernate自动创建的外键之后,导致其妙报错: Create Table fails , Foreign key constraint is incorrectly formed 为什么呢?就是因为改了Student的id属性,导致与外键不匹配,除非再修改外键的注解,,然后我不懂注解,就把id改成原来的,即去掉了ZEROFILL属性如何注解嵌入值,参看Hibernate之父写的那本书,里面有实例新闻热点
疑难解答