JPA属性访问方式
在model中封装了一个对象,在一些属性的setter中加入了对该对象的访问,结果发现全无效果。
百度了下,原来是因为JPA有两种属性访问方式:
- 域访问(field access):无需设置getter/setter,直接在字段上设定@Column等值,在运行时注入值。
- 属性访问(property access):必须设定getter/setter,在getter上设定@Column等值,通过getter/setter注入值。
原本之前是用直接配置在字段名字上的field access方式,所以没有调用到getter/setter,
而项目使用的是1.0版本的JPA,不支持在一个entity中混用两种方式,因此我把这个entity的属性全部改为了property access。
关于域访问方式与属性访问方式的比较,可以阅读此文:[译文]JPA的实施模式:域访问和属性访问之间的比较
HQL与Criteria
之前一直都在用HQL,现在的项目组却更推荐用Criteria,为什么呢……
于是查了下资料,和同学、朋友交流了下,就最浅显的部分做了少少比较,还请指点一二。 > < //
Caused by: java.net.UnknownHostException: struts.apache.org
在做demo时遇到的问题,
起初搜了半天似乎都是说没有联网,DTD无法读取。
查了下DTD似乎是优先在本地读取,再读其他的。
但是我的另一个项目就用得好好的,不同点只有引入的jar包。
搞了一上午搞不定,下午仔细一看囧到……
是jar包的版本不一致导致。
DWR+EXT在线聊天
嗯,么想到这么快就过了123456hits,没有截图到囧。大概是因为这几天开始校园招聘了吧,发现关键字里面很多都是XX 笔试……
那么放送一个半年前搞的Ext+DWR实现聊天的段落、、
玩这个是因为毕业设计里面有一个需要教师在线指导学生的模块,类似于聊天室,界面如下图(中的在线指导子页面)所示:
Ext用的是Ext JS Library 2.0.2,DWR则使用2.0,因为支持Server Push。
贴一段技术手册里的介绍^^:
系统中教师指导学生模块可以通过在线聊天的方式进行,该模块的实现采用了Server Push(服务器推送)技术,实时发送消息,优于现在浏览器通过AJAX轮询服务端的策略。基于Java开发的DWR框架从2.0开始提供了push功能,通过它建立的应用可以大大节省服务器的资源消耗。
DWR 2中提供的push功能是一种Comet方式,即长连接机制(long live http)。浏览器向服务器请求时,服务器一直保持着这个连接,在关闭之前都可以主动地推送数据给浏览器。下面是本系统中聊天模块的实现示例图:
图1-2 聊天模块实现
tag s:property must be empty, but is not
写struts2标签的时候遇到好多次这个问题。。
每次都匆忙地去检查action里面是不是为null、property的value是不是写错了。。
结果最后google都告诉我 是我没有加结束符……(<s:property value="xxx" />)特此笔记。。
no transaction in progress
用Spring做事务管理,在配JPA的时候出问题,原来用Hibernate的时候就没问题的,换JPA就报这个错:no transaction in progress。
百度不到,google之,得解:
Use the spring transaction annotations (which must be enabled on the context) For getters use the @Transactional(propagation = Propagation.SUPPORTS). This will ensure a session will actually be openend. For create/update/delete use the @Transactional(propagation = Propagation.REQUIRED) to ensure that a either new transaction will be started, or the call on the DAO participates on the current transaction.
原本只在IBaseDao上注明事务,现在要对每个方法都注解一下才可用,囧rz,不知道会是哪里出了问题。
unknown Oracle major version [0]
用Hibernate实现的JPA做ORM,连接数据库时报这个错误,看来是Hibernate不知道Oracle所用的版本,
百度一下,在Hibernate配置文件里面设置hibernate.dialect属性为org.hibernate.dialect.Oracle9iDialect即可(这里使用的是9i)。
Hello World, Seam!
嗯(⊙_⊙),用最简单的通讯录做一个Hello World, Seam!吧。
IDE用Eclipse JEE+JBoss Tools(主要是Seam Tools),前端JSF,会话bean和实体bean用EJB3。
功能就是CRUD。