持續更新中,遇到新的問題也會加進來。 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,會拋異?!盕ield ‘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之父寫的那本書,里面有實例新聞熱點
疑難解答