异常总结
一、org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.ptn.uim.bean.UimServFileRecord.uimServFileDatas,
no session or session was closed
错误原因:
原因是在hibernate映射关系中由于延迟加载,session在调用前已经被关闭,,所以加载set属性时无可用session
解决方案:
在 @ManyToOne端设置fetch=FetchType.LAZY,@OneToMany端设置fetch=FetchType.EAGER,如下配置
@ManyToOne(cascade={CascadeType.REFRESH, CascadeType.MERGE}, optional=true, fetch=FetchType.LAZY)
@JoinColumn(name="uim_serv_file_record_id")
private UimServFileRecord uimServFileRecord;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER,mappedBy="uimServFileRecord")
private Set<UimServFileData> uimServFileDatas=new HashSet<UimServFileData>();
二、http://java.sun.com/jsp/jstl/core cannot be resolved either web.xml or the jar files deployed whth this application
解决办法:
有其他解决办法,但是最保守的做法是将jstl.jar、standard.jar这两个jar包直接拷贝到工程的lib目录下
三、
List<EvdoKeyInfo> evdoKeyInfos=null;
evdoKeyInfos.add(new EvdoKeyInfo(arrs[0], arrs[1])); --->会抛出空指针异常
解决办法:
List<EvdoKeyInfo> evdoKeyInfos=new ArrayList<EvdoKeyInfo>();
evdoKeyInfos.add(new EvdoKeyInfo(arrs[0], arrs[1]));
四、Could not synchronize database state with session解决方法
错误原因:
修改数据库映射实体bean时,数据库未对应更新导致的
解决办法:
此处使用hibernate.hbm2ddl.auto自动生成表结构,把oracle中的表和序列号删除,然后启动tomcat重新生成表和序列号
五、在myeclipse中安装svn,可能先前安装的adt插件无法使用解决办法
解决办法如下:
1)、首先找到myeclipse安装目录,如我的myeclipse安装在D:\dev\目录下
2)、接着在D:\dev\MyEclipse 6.5\eclipse\configuration目录下,找到org.eclipse.update文件夹并删除此文件夹
3)、重新启动myeclipse,大功告成
六、java中url带中文参数或空格导致乱码问题
解决办法如下:
new String(message.getBytes("iso-8859-1"), "gb2312");
七、启动PL/SQL Developer 报字符编码不一致错误 ,报类似如下异常
Database character set (AL32UTF8) and Client character set (ZHS16GBK) are different.
Character set conversion may cause unexpected results.
Note: you can set the client character set through the NLS_LANG environment variable or the NLS_LANG registry key in
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_Oracle_10g.
解决办法如下:
打开注册表,通过命令regedit。找到文中提示的路径,发现NLS_LANG键的值为: SIMPLIFIED CHINESE_CHINA.ZHS16GBK
修改为:SIMPLIFIED CHINESE_CHINA.AL32UTF8即可
八、org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
这是由于没有配置事务或事务配置没成功导致的
解决办法如下:
把其中的 getCurrentSession改成 openSession 就可以使用! 很明显是因为那个allowCreate的问题,当没有事务启动的时候,getCurrentSession是无法创建Session的! 说明配置事务没有成功!
九、JavaMail的java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream错误
原因:MyEclipse6.5的javaee.jar中的mail包与JavaMail包有冲突。
解决办法如下:
在MyEclipse目录下,找javaee.jar包,用WinRar打包,删除里面的mail目录,然后加入mail.jar和activition.jar。
javaee.jar路劲D:\dev\myeclipse\myeclipse\eclipse\plugins\com.genuitec.eclipse.j2eedt.core_6.5.0.zmyeclipse650200806\data\libraryset\EE_5
十、MyEclipse8.5安装插件
在Myeclipse8.5安装目录D:\dev\MyEclipse 8.5\dropins下,新建文件夹plugins 和 features ,然后把插件放到相应的文件夹下重启。
注意:如果文件夹plugins 和 features 已存在则不用新建。
十一、tomcat部署项目
配置步骤如下:在D:\apache-tomcat-6.0.18\conf\Catalina\localhost(若/Catalina/localhost文件不存在则自己创建下)目录下配置部署文件,新建一个xml文件取名为DS_Trade.xml(文件名可以随意取,建议取个有意义的名字),添加如下内容:
<Context path="/DS_Trade" debug="0" docBase="F:\workspace\DS_Trade\WebRoot"></Context>
注意:DS_Trade跟Web Context-root(右击项目->Proterties->MyEclipse->Web)一致。
十二、用java调用webservice客户端
public static void main(String[] args) throws MalformedURLException {
SimpleService simpleService=new SimpleService();
SimpleServicePortType type=simpleService.getSimpleServiceHttpSoap11Endpoint();
int price=type.getPrice().getReturn();
String greet=type.getGreeting("ljq");
System.out.println(price+" : "+greet);
}
十三、设置tomcat编码
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8"
connectionTimeout="20000"
redirectPort="8443" />
特别引起我注意的是 URIEncoding="UTF-8" ,如果不设置,url上传递的中文就不能被正确解码。提醒各位使用utf-8编码的朋友注意使用tomcat的这个设置,在service.xml中配置。
十四、
JavaMail的java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
java.lang.NoClassDefFoundError: com/sun/activation/registries/LogSupport错误
环境:
MyEclipse和JDK1.6环境,加入JavaMail1.4.3的jar包。
运行测试报java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream 。
原因:
MyEclipse6.5的javaee.jar中的mail包与JavaMail包有冲突。
解决:
在MyEclipse目录下,找javaee.jar包,用WinRar打包,删除里面的mail目录和activition目录,然后加入mail.jar和activition.jar
十五、java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z 解决办法
异常原因:
javaee.jar中的部分类与hibernate-jpa-2.0-api-1.0.0.Final.jar存在版本冲突.
解决办法:
在Java EE 5 Libraries中删除persitence的使用。
操作步骤:
用RAR打开javaee.jar,删除javax下的persitence目录,javaee.jar在D:\dev\MyEclipse 6.5\myeclipse\eclipse\plugins\com.genuitec.eclipse.j2eedt.core_6.5.0.zmyeclipse650200806\data\libraryset\EE_5\目录下。
十六、tnsnames.ora配置
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oracle服务名)
)
)
命令:tnsping ORCL
十七、url中的参数含有空格,导致请求失败的解决方案
解决办法:
%20代替url参数中的空格,如:urlStr=urlStr.replace(" ", "%20");
十八、 jetty部署异常
jetty部署项目时报了如下异常:
rg.apache.jasper.JasperException: PWC6345: There is an error in invoking javac. A full JDK (not just JRE) is required
最终解决方案如下:
在eclipse——>Window——>prefence——>java——>Installed JREs,使用java jre会部署失败,使用java jdk即可成功。